第2章-MFC应用程序共88页文档课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第2章-MFC应用程序共88页文档课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 应用程序 88 文档 课件
- 资源描述:
-
1、主要内容主要内容v2.1用MFC向导生成应用程序v2.2 应用程序框架分析v2.3 文档与视图v2.4 工具栏和状态栏v2.5-2.7MFC新功能v2.8 应用程序框架类对象分析2.1 用用MFC向导生成应用程序向导生成应用程序v用AppWizard应用程序向导生成MFC应用程序。 单文档应用程序 多文档应用程序 对话框应用程序v用ClassWizard工具生成派生类、定义处理消息、管理对话框、定制MFC成员函数。2.1 用用MFC向导生成应用程序向导生成应用程序v演示MFC向导生成常用的三种应用程序。2.1.2 生成的应用程序类型生成的应用程序类型v基于对话框的应用程序 CWinApp、CD
2、ialog类2.1.2 生成的应用程序类型生成的应用程序类型v单文档应用程序 CWinApp、CFrameWnd、CView、CDocument2.1.2 生成的应用程序类型生成的应用程序类型v多文档应用程序 CWinApp、CMDIFrameWnd、 CMDIChildWnd、CView、CDocument2.1.3 向导生成工程文件简介向导生成工程文件简介v 头文件与实现文件头文件与实现文件 各个类的各个类的*.h和和*.cpp Resource.h:定义工程中所有资源标识符,给资源:定义工程中所有资源标识符,给资源ID分配一个整数值。分配一个整数值。 StdAfx.h和和StdAfx.c
3、pp:用于建立一个预编译的头:用于建立一个预编译的头文件。文件。v 资源文件资源文件 *.rc和和*.rc2:是程序所使用的所有:是程序所使用的所有Windows资源资源的列表。的列表。 *.ico:应用程序的图标所使用的图标文件。:应用程序的图标所使用的图标文件。 *Doc.ico:应用程序的文档图标文件。文档图标一般:应用程序的文档图标文件。文档图标一般显示在多文档程序界面上。显示在多文档程序界面上。 Toolbar.bmp:工具栏按钮的位图文件。:工具栏按钮的位图文件。2.1.3 向导生成工程文件简介向导生成工程文件简介v 解决方案文件和工程文件解决方案文件和工程文件 *.sln:保存当
4、前解决方案所包含的工程的信:保存当前解决方案所包含的工程的信息。息。 *. vcxproj:包含当前工程的设置、工程中:包含当前工程的设置、工程中的文件等信息。的文件等信息。 MFCMFC应用程序框架结构类的继承关系:应用程序框架结构类的继承关系: 2.2 应用程序框架分析应用程序框架分析CCmdTargetCWinThreadCWndCDocumentCDocTemplateCWinAppCViewCFrameWndCMDIChildWndCMDIFrameWndCSingleDocTemplateCMultiDocTemplateCObject 2.2.1 框架简介框架简介v 1.CObj
5、ect类类 CObject是是MFC类库的根类,它几乎描述了所有类库的根类,它几乎描述了所有MFC类类的一些公共特性,并且给所有由它派生出的类提供了的一些公共特性,并且给所有由它派生出的类提供了3种种重要特性,即:串行化支持、运行时类信息支持以及诊断重要特性,即:串行化支持、运行时类信息支持以及诊断和调试支持。和调试支持。v 2.CCmdTarget类类 命令类命令类CCmdTarget是是CObject的子类,它是的子类,它是MFC库库中所有具有消息映射属性的类的公共基类。从中所有具有消息映射属性的类的公共基类。从CCmdTarget派生的类能在程序运行时动态创建对象和派生的类能在程序运行时
6、动态创建对象和处理命令消息。处理命令消息。 3. CWinApp类类CObjectCCmdTargetCWinThreadCWinAppWinMain函数的函数体的封装函数的函数体的封装支持线程管理支持线程管理2.2.1 框架简介框架简介 应用程序类应用程序类CWinApp是是CWinThread的子类,封装的子类,封装了初始化、运行、终止应用了初始化、运行、终止应用程序的代码。可以由此派生程序的代码。可以由此派生自己的应用类。自己的应用类。指向框架窗口的指针指向框架窗口的指针m_pMainWnd2.2.1 框架简介框架简介v CWinApp类中定义了三个可以重写的虚函数:InitInstan
7、ce () -程序创建和显示窗口。l 程序设计时,必须以CWinApp类为基类派生自己的应用程序类,并根据情况重写InitInstance () 。Run(),处理消息循环。ExitInstance()程序结束时做收尾工作。2.2.1 框架简介框架简介4. 4. 文档模板类文档模板类CDocTemplateCDocTemplate2.2.1 框架简介框架简介2.2.1 框架简介框架简介2.2.1 框架简介框架简介5.CFrameWnd5.CFrameWnd类类 CFrameWndCFrameWnd类是类是CWndCWnd类的派生类。它是所有其他类的派生类。它是所有其他框架窗口类的基类,主要用来
8、管理一个窗口。框架窗口类的基类,主要用来管理一个窗口。 CFrameWndCFrameWnd类的对象是一个框架窗口,包括边框、类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。的视图。CFrameWndCFrameWnd类支持单文档界面,对于多文档类支持单文档界面,对于多文档界面,使用它的两个派生类界面,使用它的两个派生类CMDIFrameWndCMDIFrameWnd和和CMDIChildWndCMDIChildWnd。CMDIFrameWndCMDIFrameWnd类用于类用于MDIMDI的主窗口,的主窗口
9、,CMDIChildWndCMDIChildWnd类用于类用于MDIMDI的子窗口。的子窗口。 2.2.1 框架简介框架简介6.CView6.CView类类 视图类视图类CViewCView是是CWndCWnd类的子类。视图类及其派类的子类。视图类及其派生类用于管理框架窗口的客户区。生类用于管理框架窗口的客户区。7.CDocument7.CDocument类类 文档类文档类CDocumentCDocument负责装载和维护文档。文档负责装载和维护文档。文档包括应用程序的工作成果或环境设置数据等,可包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。以是程序需要保存的任何内容。
10、 2.2.1 框架简介框架简介2.2.1 框架简介框架简介2.2.1 框架简介框架简介v各对象之间的关系2.2.1 框架简介框架简介应用程序对象文档模板2.2.2 MFC应用程序运行流程应用程序运行流程2.2.2 MFC应用程序运行流程应用程序运行流程v2.应用程序的执行过程应用程序的执行过程 启动启动:创建应用程序对象创建应用程序对象theApp、调用应用程、调用应用程序类的构造函数初始化对象序类的构造函数初始化对象theApp。 应用程序框架调用应用程序框架调用MFC提供的提供的AfxWinMain( )主函数。主函数。 AfxWinMain( )主函数,首先通过调用全局主函数,首先通过调
11、用全局函数函数AfxGetApp( )来获取来获取theApp的指针的指针pApp; 然后通过该指针调用然后通过该指针调用theApp的成员函数的成员函数InitInstance( )来初始化应用程序。来初始化应用程序。 在应用程序的初始化过程在应用程序的初始化过程InitInstanceInitInstance中,同中,同时还构造了文档模板,产生最初的文档、视图和主时还构造了文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。框架窗口,并生成工具栏和状态栏。2.2.2 MFC应用程序运行流程应用程序运行流程 当当InitInstance( )函数执行完毕后,函数执行完毕后,Af
12、xWinMain( )函数将调用成员函数函数将调用成员函数 Run( ),进,进入消息处理循环;入消息处理循环; 函数函数Run( )收到收到WM_QUIT消息。消息。 MFC首先调用首先调用CWinApp类的成员函数类的成员函数ExitInstance( ); 然后调用静态对象的析构函数;然后调用静态对象的析构函数; 退出应用程序,将控制权交给操作系统。退出应用程序,将控制权交给操作系统。C:Program FilesMicrosoft Visual Studio 10.0vcatlmfcsrcwinmain.cpp2.2.2 MFC应用程序运行流程应用程序运行流程2.2.3 应用程序窗口应
13、用程序窗口v重叠窗口v弹出窗口v子窗口 WindowsWindows消息主要有消息主要有3 3种类型种类型: :标准标准WindowsWindows消息、消息、控件消息和命令消息。控件消息和命令消息。1 1)标准标准WindowsWindows消息消息除除WM_COMMANDWM_COMMAND以外,所有以以外,所有以“WM_WM_”为前缀的消息为前缀的消息都是标准都是标准WindowsWindows消息消息; ;由窗口类或视图类处理由窗口类或视图类处理; ;都有默认的处理函数,它们在都有默认的处理函数,它们在CWndCWnd类中进行了预类中进行了预定义。定义。1 . 消息的类别及其描述消息的
14、类别及其描述 2.2.4 消息机制与消息循环消息机制与消息循环标准的标准的WindowsWindows消息又分为消息又分为3 3类:类:键盘消息、鼠标消息和窗口消息。键盘消息、鼠标消息和窗口消息。(1)(1)键盘消息键盘消息 键盘消息与键盘某个键的动作相关联。常见的键键盘消息与键盘某个键的动作相关联。常见的键盘消息有以下几种。盘消息有以下几种。WM_KEYDOWNWM_KEYDOWN、WM_KEYUPWM_KEYUP:按下、释放键产生的消息。:按下、释放键产生的消息。WM_CHARWM_CHAR:输入字符时产生的消息。:输入字符时产生的消息。2.2.4 消息机制与消息循环消息机制与消息循环(2
15、) (2) 鼠标消息鼠标消息 鼠标消息涉及到鼠标的单击、双击、拖动等。常用的鼠标消息涉及到鼠标的单击、双击、拖动等。常用的鼠标消息有以下几种。鼠标消息有以下几种。 WM_MOUSEMOVEWM_MOUSEMOVE:鼠标移动时产生的消息。:鼠标移动时产生的消息。 WM_RBUTTONDOWNWM_RBUTTONDOWN:鼠标右键按下时产生的消息。:鼠标右键按下时产生的消息。 WM_LBUTTONDOWNWM_LBUTTONDOWN:鼠标左键按下时产生的消息。:鼠标左键按下时产生的消息。 WM_LBUTTONDBLCLICKWM_LBUTTONDBLCLICK:鼠标双击时产生的消息。:鼠标双击时产
16、生的消息。2.2.4 消息机制与消息循环消息机制与消息循环(3) (3) 窗口消息窗口消息 窗口消息一般与创建窗口、绘制窗口、移动窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等动作有关。窗口和销毁窗口等动作有关。 在在MFCMFC应用程序中,窗口消息是由视图类、应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。窗口类及它们的派生类处理的。2.2.4 消息机制与消息循环消息机制与消息循环2).2).控件消息控件消息 控件消息是指控件或其他子窗口向父窗口发送控件消息是指控件或其他子窗口向父窗口发送的消息。的消息。 与其他标准的与其他标准的WindowsWindows消息一样,控件
17、消息也应消息一样,控件消息也应该在视图类、窗口类中进行处理。但是,如果用户该在视图类、窗口类中进行处理。但是,如果用户单击按钮控件时,发出的控件通知消息单击按钮控件时,发出的控件通知消息BN_CLICKEDBN_CLICKED将作为命令消息来处理。将作为命令消息来处理。2.2.4 消息机制与消息循环消息机制与消息循环3).3).命令消息命令消息 命令消息是由菜单项、工具栏按钮、快捷键等命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的用户界面对象发出的WM_COMMANDWM_COMMAND消息。消息。 命令消息与其他消息不同,它可被更广泛的对命令消息与其他消息不同,它可被更广泛的对象
18、如文档、文档模板、应用程序对象、窗口和视图象如文档、文档模板、应用程序对象、窗口和视图等处理。等处理。2. MFC消息映射机制消息映射机制 MFC MFC采用消息映射来处理消息;采用消息映射来处理消息; 消息映射机制包括一组消息映射宏,用于把一个消息映射机制包括一组消息映射宏,用于把一个WindowsWindows消息和其消息处理函数联系起来。消息和其消息处理函数联系起来。 所有从所有从CCmdTargetCCmdTarget类派生出来的类都能够拥有自类派生出来的类都能够拥有自己的消息映射。己的消息映射。 与与MFCMFC消息映射机制有关的宏有以下消息映射机制有关的宏有以下3 3个:个:DEC
19、LARE_MESSAGE_MAP( )DECLARE_MESSAGE_MAP( )BEGIN_MESSAGE_MAP(MyClass, MybaseClass)BEGIN_MESSAGE_MAP(MyClass, MybaseClass)END_MESSAGE_MAP( )END_MESSAGE_MAP( )2.2.4 消息机制与消息循环消息机制与消息循环为了使用消息映射宏:为了使用消息映射宏:u首先在类定义的结尾用首先在类定义的结尾用DECLARE_MESSAGE_MAP( )DECLARE_MESSAGE_MAP( )宏来声明使用消息映射,该宏表示在为各个处理函宏来声明使用消息映射,该宏表
20、示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。是该类的成员函数。u然后在类的实现源文件中用然后在类的实现源文件中用BEGIN_MESSAGE_MAP( )BEGIN_MESSAGE_MAP( )和和END_MESSAGE_MAP( )END_MESSAGE_MAP( )宏来宏来定义消息映射。定义消息映射。MFCMFC应用程序应用程序MESSAG_MAPMESSAG_MAP消息映射的形式如下:消息映射的形式如下:2.2.4 消息机制与消息循环消息机制与消息循环BEGIN_MESSAGE_MAP(MyClass, Myba
21、seClass) / AFX_MSG_MAP (MyClass) /ClassWizard维护消息映射宏的标记维护消息映射宏的标记 ON_. /MFC预定义消息映射宏预定义消息映射宏 ON_MESSAGE(message, memberFun)/用户自定义消息映射宏用户自定义消息映射宏 / AFX_MSG_MAPEND_MESSAGE_MAP()其中,其中,MyClass是拥有消息映射的派生类名,是拥有消息映射的派生类名,MybaseClass 是其基类名。是其基类名。2.2.4 消息机制与消息循环消息机制与消息循环2.2.4 消息机制与消息循环消息机制与消息循环3 自定义消息处理自定义消息处
22、理 自定义消息处理自定义消息处理:定义消息名、分配定义消息名、分配IDID值及完成消息值及完成消息映射。映射。WindowsWindows将所有的消息值分为将所有的消息值分为4 4段:段:0 x00000 x00000 x03FF0 x03FF段段: :用于用于WindowsWindows系统消息系统消息0 x04000 x04000 x7FFF0 x7FFF段段: :用于用户自定义的窗口消息用于用户自定义的窗口消息0 x80000 x80000 xBFFF0 xBFFF段段: :为为WindowsWindows保留值保留值0 xC0000 xC0000 xFFFF0 xFFFF段段: :用于
23、应用程序的字符串消息。用于应用程序的字符串消息。2.2.4 消息机制与消息循环消息机制与消息循环 常量常量WM_USER(WM_USER(为为0 x0400)0 x0400)与第一个自定义消息值相对应,与第一个自定义消息值相对应,用户必须为自己的消息定义相对于用户必须为自己的消息定义相对于WM_USERWM_USER的偏移值,利用的偏移值,利用#define#define语句直接定义自己的消息,如下所示:语句直接定义自己的消息,如下所示: #define WM_HIDE WM_USER+3 / 自定义消息自定义消息WM_USER 也可以调用窗口消息注册函数也可以调用窗口消息注册函数Regist
24、erWindowMessage( )RegisterWindowMessage( )来来定义一个定义一个WindowsWindows消息,由系统分配消息一个整数值。该函消息,由系统分配消息一个整数值。该函数原型为:数原型为: UINT RegisterWindowMessage(LPCTSTR lpString); 其中参数其中参数lpStringlpString是要定义的消息名,调用成功后将返是要定义的消息名,调用成功后将返回该消息的回该消息的IDID值。值。2.2.4 消息机制与消息循环消息机制与消息循环2.2.4 消息机制与消息循环消息机制与消息循环v 自定义消息方法的步骤: 1、:定义
25、消息 #define WM_HIDE WM_USER+101 2、在类头文件的AFX_MSG块中声明消息处理函数:class CMainFrame:public CFrameWndprotected:/AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnTimer(UINT nIDEvent);afx_msg LRESULT OnHide(WPARAM wParam, LPARAM lParam);/AFX_MSGDECLARE_MESSAGE_MAP()2.2.4 消息机制
展开阅读全文