MFC编程讲义.doc_第1页
MFC编程讲义.doc_第2页
MFC编程讲义.doc_第3页
MFC编程讲义.doc_第4页
MFC编程讲义.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MFC基本应用程序的建立一、Windows编程的特点编写Windows应用程序有多种方法:l 直接调用Windows环境提供的Win32API函数来编写应用程序(传统方法)l 应用MFC和ATL直接编写Windows应用程序,可简化编程工作。l 使用MFC和ATL和MFC AppWizard来生成Windows应用程序的基本源程序,然后用Class Wizard来建立应用程序的类,消息处理和数据处理或定义控件的属性,方法和事件。(交互式方法)概念:APIApplication Programmer Interfaceu 为应用程序提供Win系统各种特殊函数及数据结构定义u Win应用程序可以利用上千个标准API函数调用系统功能u 是Win系统与Win应用程序间的标准程序接口功能:l 窗口管理函数:实现窗口的创建、移动和修改功能l 系统服务函数:实现与操作系统有关的多种功能l 图形设备(GDI)函数:实现与设备无关的图形操作功能MFCMicrosoft Foundation Class Library 集成了大量已经预先定义好的类(class),用户可以根据编程的需要,调用相应的类,或根据需要自定义有关的类功能:MFC把传统的Windows编程规范中的大多数内容封装成为各种类,使程序人员从繁杂的编程中解脱出来,提高编程效率。Windows编程特点:1、消息驱动机制 消息是描述事件发生的信息 Windows程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。Windows编程常用消息:l 窗口管理消息l 初始化消息l 输入消息l 系统消息l 剪贴板消息l 控制处理消息l 控制通知消息l 滚动条通知消息l 非用户区消息l MDI消息l DDE消息l 应用程序自定义的消息2、图形设备接口(GDI)GDIGraphical Device Interface用户直接利用GDI来实现用户应用程序和外部设备之间的桥梁。3、基于资源的程序设计 在Windows环境下,每一个图形元素都可作为一种可以装入应用程序的资源来存放,可将这些资源作为一个常量来使用,并可编辑,修改。4、动态连接库DLLDynamic Link Library 一种特定结构的函数,能在应用程序运行过程中装入和连接,且多个应用程序可共享同一个DLL DLL可提高程序模块的灵活性,它可单独设计、编译和调试。5、进程和线程 进程是装入内存中正在执行的应用程序。 线程是操作系统分配CPU时间的基本实体。 同一系统中可以有多个进程,而每个进程中有一个或多个线程。Windows基本数据类型Windows常用句柄类型说明:n 基本数据类型都大写,与C+基本数据类型相区别。n 基本数据类型的前缀是P或LP,表示为指针或长指针。n 基本数据类型的前缀是H,表示为句柄类型,前缀为U表无符号数据。n Windows还提供了宏来处理这些基本数据类型。如LOBYTE和HIBYTEn 句柄是一个4字节长的数值,用于标识应用程序中不同的对象和同类对象中不同的实例二、编写一个MFC应用程序 MFC把传统的Windows编程规范中的大多数内容封装成为各种类,使程序员从繁杂的编程工作中解脱出来。1、MFC概述 MFC类层次CObjectCCmdTargetCWinThreadCDocumentCFrameWndCWndCMDIChildWndCWinAppCViewCDialogCMDIFrameWndCMiniFrameWndCobject完成动态空间分配与回收,一般诊断,出错信息和文档序列化CcmdTarget完成信息发送CWinApp应用程序主线程,CWinThread完成对线程的控制(运行,终止,挂起)CDocument文档类,包含运行期间的所有用到数据CWnd通用窗口类CFrameWnd标准框架的应用类CDialog对话框类CView让用户通过窗口访问文档CMDIFrameWnd多文档CMDIChildWnd单文档CMiniFrameWnd简化窗体2、一此常用类的介绍(1). 应用程序类CWinApp CWinApp是一个重要的类。每一个基于框架的应用程序都有且只有一个从CWinApp派生出来的类,负责管理基于Windows应用程序的初始化、运行和结束。 重要的成员函数: virtual BOOL InitInstance ( ); virtual int Run ( ); virtual BOOL OnIdle ( long ICount ); virtual int ExitInstance ( );(2). 窗口框架类 ( Frame Windows ) CFrameWnd ( 成员函数:BOOL Create( ) ) CMDIFrameWnd CMDIChildWnd(3). 文档类 CDocument 重要成员函数: BOOL OnNewDocument ( ); /文件处理用 void Serialize( CArchive& ar ); void SetModifiedFlag( BOOL bModified = TRUE ); /文件修改标志 void UpdateAllViews( . );(4). 视图类 CView CFormView CScrollView 重要成员函数: virtual void OnInitialUpdate( ); / 视窗第一次调用文件时使用更新 CDocument* GetDocument( ) const; virtual void OnUpdate( ); virtual void OnDraw( CDC* pDC ) ;(5). 对话框类 CDialog CColorDialog CfileDialogCFindReplaceDialog CFontDialog 重要的成员函数: virtual int DoModal( ); void GotoDlgCtrl( CWnd* pWndCtrl ); virtual BOOL OnInitDialog( ); /移动焦点到指定的控制器 virtual void OnOK( ); virtual void OnCancel( );(6). 绘图类 CDC CClientDC CpaintDCCBitmap, CBrush, CFont, CPen (7). 控件类 CAnimateCtrl, CButton(CBitmapButton), CEdit, CComboBox, CListBox, CHotKeyCtrl, CScrollBar, CStatic, CStatusBarCtrl, CToolBarCtrl, (8). 简单值类型 CPoint, CSize, CRect, CString, CTime, CTimeSpan3、程序控制流程WinMainInitInstanceRunExitInstance调用调用调用 应用程序类构成了应用程序的主执行线程。每一个应用程序有一个且只有一个从CwinApp类派生的对象,该对象在窗口建立之前构造。基于MFC建立的应用程序也有WinMain函数,但此函数不用编写,由MFC提供,此隐含。 应用程序在执行WinMain函数之前,定义全局变量 在建立全局变量后,WinMain函数接收控制,WinMain函数调用InitInstance成员函数,建立一个应用程序实例; 在消息循环时调用Run成员函数; 在程序结束时调用ExitInstance成员函数。1)、成员函数InitInstance该函数是应用程序类的一个成员函数。功能:创建并注册文档模板 文档模板用于存放与应用程序文档、视图和边框有关的信息。 创建或打开文档时,使用文档模板创建文档类对象来存放文档。 创建视图类对象来显示文档 创建边框窗口类对象来画出视图窗口。 创建并注册文档模板代码:CMultiDocTemplate *pDocTemplate; /定义一个多文档模板指针变量 / 若为单文档CSingeDocTemplatepDocTemplate=new CMultiDocTemplate ( /创建应用程序模板 /单文档时CSingeDocTemplate IDR_MYAPPTYPE, /菜单、加速键等资源标识号 RUNTIME_CLASS(CMyAppDoc), /文档类 RUNTIME_CLASS(CChildFrame), /多文档子窗口 /单文档时CMainFrame RUNTIME_CLASS(CMyAppView); /视窗类AddDocTemplate(pDocTemplate); /向应用程序增加、注册文档模板其中: RUNTIME_CLASS宏调用,每次调用返回指定类的信息,从而使应用程序动态的创建该类的一个实例。返回CruntimeClass类指针。2)、成员函数Run 将调用CWinApp的成员函数Run来处理消息循环。 Run不断执行消息循环,检查消息队列中有没有消息。3)、成员函数OnIdle若没有消息处理,CWinApp将调用成员函数OnIdle来做空闲处理。4)、成员函数ExitInstance每当要终止某应用程序时,CWinApp将调用成员函数ExitInstance4、理解程序框架 如用MFC应用程序向导建立一个MyApp单文档应用程序框架,则在项目工作区窗口的ClassView页面中有以下的类: CMyAppApp CMyAppDoc CMyAppView CMainFrame CAboutDlg(1)、应用类CMyAppApp 说明:l 类CmyAppApp是由基类CwinApp派生的l 在*.h代码k中: /AFX_VIRTUAL(类名) /AFX_VIRTUAL 是ClassWizard定义的专门用做虚函数重载的标记,表示程序块中的虚函数的重载是由ClassWizard自动管理,用户一般不需要更改。l 在*.h代码中: /AFX_MSG(类名) /AFX_MSG 是ClassWizard定义的专门用做声明消息的标记l 在*.cpp代码中: /AFX_MSG_MAP(类名) /AFX_MSG_MAP是ClassWizard定义的专门用做消息映射的标记,表示程序块中的消息映射函数是由ClassWizard自动管理,用户一般不需要更改。l 在*.cpp代码中的成员函数InitInatance建立文档模板l 代码中afx_msg 是MFC用于定义消息函数的标志(2)、文档类CmyAppDoc说明:l 文档类是由Cdocument类派生的l 用于存放应用程序的数据并实现文件保存和装载功能(通过MyAppDoc:Serialize实现)。(3)、视图类CmyAppView 说明:l 视图类是由Cview派生的l 用于指定用户以什么方式见到文档数据和以什么方式进行交互。l 用户的各种输入由视图来响应、处理,且打印,预览也在视图中-“文档/视图结构”机制。是MFC应用程序框架核心,可进行消息处理,文档格式化,文档数据可视化;使文档数据和视图分离,减少代码冗余。l PreCreateWindows虚函数是在相应窗口创建之前 被系统调用,在此函数中可吏改CREATESTRUCT结构内容,改变相应窗口风格。l OnDraw 是一个重要的虚函数,当窗口发生变化(大小,状态)时,系统会自动调用此函数重绘文档窗口的客户区。用户可以在此区域添加代码进行绘图。 如:pDC-TextOut(100,100,”西华大学”)(4)、主框架窗口CmainFrame 说明:l CmainFrame是由CframeWnd类派生的l 用于创建和控制选单、工具栏和状态栏等界面元素类。(5)、“关于”对话框CAboutDlg 说明:l CAboutDlg是由Cdialog派生的l 该类增加了AFX_DATA机制-数据映射机制,实现DDX(数据交换)/DDV(数据校验)(6)、MFC涉及的机制l 文档/视图机制:使文档类,应用程序类,视图类,框架类之间有机的结合在一起。利用OnDraw成员函数,视通过GetDocument函数来获取文档指针,然后利用该指针来访问文档中的数据成员。(可见部分)视文档l 消息映射机制:实现对各种消息的处理。l 数据映射机制:实现对话框中变量与控件之间的数据交换和数据校验。l 运行时类型检查机制:通过GetRuntimeClass,IsKindOf(测试对象与给定类间的关系),宏DECLARE_DYNAMIC, 宏IMPLEMENT_DYNAMIC来实现。l 诊断信息转储机制:通过AssertValid,Dump, 宏TRACE来实现。5、使用ClassWizard ClassWizard称为类向导。 功能:添加类,进行消息和数据映射,创建OLE属性和方法,进行ActiveX事件处理。(1)、MFC ClassWizard对话框 (略)(2)、消息和消息映射 每一个可以接收的消息和命令的对象都有一个消息映射与处理函数相连接。、 消息分类 窗口消息:以WM_开头的消息(WM_COMMAND除外),一般由窗口类和视图类来处理。 控件的通知消息: 命令消息:由用户交互对象(选单、工具栏的按钮,快捷键)发送的WM_COMMAND通知消息。命令消息能被多种对象接收处理。、 ClassWizard映射消息的一般方法每个用户接口对象都有一个ID标识。ID将用户接口对象与命令相联系。l 打开对话框MFC ClassWizard(Ctrl_W,菜单等)l 选择类名Class namel 选择对象ID号 Object IDsl 添加消息及消息映射函数 Messagel 编写原代码 Edit Code 此时:l 在该类声明消息标志处,添加了消息标志。 如:/AFX_MSG(CMyAppView) afx_msg void OnLButtonDown(UINT nFlags,Cpoint point);/AFX_MSGDECLARE_MESSAGE_MAP()l 在该类源文件入口处添加有相应的宏: BEGIN_MESSAGE_MAP(CMyAppView, CView) ON_WM_LBUTTONDOWN()END_MESSAGE_MAP()注意:消息映射宏后不能有分号。 CmyAppView 消息映射所属类的名称 Cview所属类的直接基类。l 在该类源文件中增加消息处理函数 void CMyAppView:OnLButtonDown(UINT nFlags,Cpoint point)Cview: OnLButtonDown(nFlags,point);(3)、常用消息 大多数消息来源于用户于程序的交互,由RUN获取。l WM_LBUTTONDOWN:产生单击鼠标左键的消息函数:afx_msg void OnLButtonDown(UINT nFlags,Cpoint point)l WM_LBUTTONUP:放开鼠标左键时产生;函数:afx_msg void OnLButtonUp(UINT nFlags,Cpoint point)l WM_RBUTTONDOWN:单击鼠标右键时产生;函数:afx_msg void OnRButtonDown(UINT nFlags,Cpoint point)l WM_RBUTTONUP:放开鼠标右键时产生;函数:afx_msg void OnRButtonUp(UINT nFlags,Cpoint point)l WM_LBUTTONDBLCLK:双击鼠标左键时产生;函数:afx_msg void OnLButtonDblClk(UINT nFlags,Cpoint point)l WM_RBUTTONDBLCLK:双击鼠标右键时产生。函数:afx_msg void OnRButtonDblClk(UINT nFlags,Cpoint point)l WM_KEYDOWN:按下一个非系统键时产生的消息 函数: afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)l WM_KEYUP:按下一个非系统键时产生的消息 函数: afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)l WM_ CHAR:按下一个非系统键时产生的消息 函数: afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)l WM_CREATE:在窗口创建时发出的消息函数: afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论