简单MFC应用程序开发.ppt
《简单MFC应用程序开发.ppt》由会员分享,可在线阅读,更多相关《简单MFC应用程序开发.ppt(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1111章章 简单简单MFCMFC应用程序开发应用程序开发l重点重点 1.SDI 1.SDI中文档中文档/视图应用程序视图应用程序 2.2.对话框应用程序对话框应用程序 3.3.示例系统中客户端界面设计示例系统中客户端界面设计2009年1月1重庆理工大学计算机科学与技术系11.1.1 11.1.1 单文档与多文档界面单文档与多文档界面11.1 11.1 文档文档/视图概述视图概述SDISDI应用程序只支持打开一个文档,如应用程序只支持打开一个文档,如WindowsWindows中的记事本是中的记事本是SDISDI应用程序的一个典型例子。应用程序的一个典型例子。MDIMDI应用程序每次可以读
2、写多应用程序每次可以读写多个文件或文档,可以同时有多个子窗口,对多个文档进行操个文件或文档,可以同时有多个子窗口,对多个文档进行操作,如作,如WordWord程序。程序。2009年1月2重庆理工大学计算机科学与技术系11.1.2 11.1.2 文档文档/视图结构视图结构一个典型一个典型SDISDI文档文档/视图应用程序主要包括视图应用程序主要包括4 4个部分:应用程个部分:应用程序对象、框架窗口对象、视图对象和文档对象。序对象、框架窗口对象、视图对象和文档对象。应用程序对象:从应用程序对象:从CWinAppCWinApp派生,管理应用程序的初始化,负责保持派生,管理应用程序的初始化,负责保持文
3、档、视图、框架窗口类之间的关系,接收文档、视图、框架窗口类之间的关系,接收WindowsWindows消息,将消息调消息,将消息调度到需要的目标窗口;度到需要的目标窗口;框架窗口对象:提供了一个应用程序的主窗口,通常窗口包含一个框架窗口对象:提供了一个应用程序的主窗口,通常窗口包含一个最大最大/最小化按钮、标题栏和系统菜单。它还可以用来处理工具条和最小化按钮、标题栏和系统菜单。它还可以用来处理工具条和状态条的创建、初始化和销毁;状态条的创建、初始化和销毁;文档对象:负责对数据进行管理和维护,数据通常被保存在文档类文档对象:负责对数据进行管理和维护,数据通常被保存在文档类的成员变量中;的成员变量
4、中;视图对象:文档和用户之间的中介。视图可以直接或间接地访问文视图对象:文档和用户之间的中介。视图可以直接或间接地访问文档类中的成员变量,它从文档类中将数据读出来,然后在屏幕上显档类中的成员变量,它从文档类中将数据读出来,然后在屏幕上显示。每个文档可以有多个视图,但每个视图只能对应于一个确定的示。每个文档可以有多个视图,但每个视图只能对应于一个确定的文档。文档。对于多文档应用程序,文档对于多文档应用程序,文档/视图结构和视图结构和SDISDI程序几乎相同,程序几乎相同,只是具有多个文档对象和视图对象。只是具有多个文档对象和视图对象。2009年1月3重庆理工大学计算机科学与技术系11.1.3 S
5、DI11.1.3 SDI程序中文档程序中文档/视图对象的创建过程视图对象的创建过程系统首先创建了一个单文档模板类,该类主要用来将程序中系统首先创建了一个单文档模板类,该类主要用来将程序中的文档类、视图类和框架窗口类联系在一起进行管理;的文档类、视图类和框架窗口类联系在一起进行管理;构造函数的参数中含有资源的构造函数的参数中含有资源的IDID,文档、框架窗口、视图的,文档、框架窗口、视图的类名和类名和RUNTIME_CLASSRUNTIME_CLASS宏;宏;RUNTIME_CLASSRUNTIME_CLASS宏对于所指定的类返回指向宏对于所指定的类返回指向CRuntimeClassCRunti
6、meClass的的指针,使得主结构可以在运行时动态创建这些类的对象;指针,使得主结构可以在运行时动态创建这些类的对象;对于多对于多文档应用程序,定义的文档模板对象是文档应用程序,定义的文档模板对象是CMultiDocTemplateCMultiDocTemplate类的对象。类的对象。/注册应用程序的文档模板。文档模板将用作文档、框架窗口和视图之间的连接注册应用程序的文档模板。文档模板将用作文档、框架窗口和视图之间的连接CSingleDocTemplate*pDocTemplate;pDocTemplate=new CSingleDocTemplate(/创建单文档模板类对象创建单文档模板类对
7、象IDR_MAINFRAME,/应用程序中各种资源应用程序中各种资源IDRUNTIME_CLASS(CTestDoc),/CTestDoc是应用程序中的文档类是应用程序中的文档类RUNTIME_CLASS(CMainFrame),/CMainFrame是应用程序的框架窗口类是应用程序的框架窗口类RUNTIME_CLASS(CTestView);/CTestView是应用程序的视图类是应用程序的视图类2009年1月4重庆理工大学计算机科学与技术系11.1.4 11.1.4 文档文档/视图结构程序的消息传递过程视图结构程序的消息传递过程文档、视图和框架窗口被创建后,消息循环就开始工作了;文档、视图
8、和框架窗口被创建后,消息循环就开始工作了;某种类型的消息按照特定的顺序从一个对象传到另一个对象,某种类型的消息按照特定的顺序从一个对象传到另一个对象,直到该消息被某个消息处理函数处理,否则将消息传递到直到该消息被某个消息处理函数处理,否则将消息传递到DefWindowProcDefWindowProc函数进行默认处理;函数进行默认处理;当用户选择菜单项、按快捷键或单击工具条按钮时,系统会当用户选择菜单项、按快捷键或单击工具条按钮时,系统会发送发送WM_COMMANDWM_COMMAND消息。消息。WM_COMMANDWM_COMMAND消息首先发送给活动的视消息首先发送给活动的视图,其次发送给
9、该视图相对应的文档和文档模板对象,再传图,其次发送给该视图相对应的文档和文档模板对象,再传送到框架窗口和应用程序对象。最后调用送到框架窗口和应用程序对象。最后调用DefWindowProcDefWindowProc函函数采用默认处理。只要在传递过程中有一个对象接收并处理数采用默认处理。只要在传递过程中有一个对象接收并处理了此消息,那么后面的对象都接收不到该消息;了此消息,那么后面的对象都接收不到该消息;只有只有WM_COMMANDWM_COMMAND消息和用户界面更新消息才遵循上面的消息消息和用户界面更新消息才遵循上面的消息传递机制,对于标准的传递机制,对于标准的WindowsWindows消
10、息,如鼠标和键盘消息通消息,如鼠标和键盘消息通常传递给视图,大多数其他的消息则传递到框架窗口;常传递给视图,大多数其他的消息则传递到框架窗口;文档对象和应用程序对象从不接收非命令消息。文档对象和应用程序对象从不接收非命令消息。2009年1月5重庆理工大学计算机科学与技术系11.2.1 CWinApp11.2.1 CWinApp类类11.2 11.2 文档文档/视图结构程序的主要成员视图结构程序的主要成员CWinAppCWinApp类代表主程序,类代表主程序,CWinAppCWinApp本身是不可见的,应用程序本身是不可见的,应用程序通过从通过从CWinAppCWinApp继承来的应用程序类来实
11、现相关的功能,它继承来的应用程序类来实现相关的功能,它负责维护程序进程的启动、终止、消息循环、命令行参数、负责维护程序进程的启动、终止、消息循环、命令行参数、资源管理等;资源管理等;CWinAppCWinApp类中类中InitInstanceInitInstance与与ExitInstanceExitInstance是最常见的被重是最常见的被重载的两个成员函数。载的两个成员函数。文档文档/视图结构程序的核心类有视图结构程序的核心类有5 5个:个:CWinAppCWinApp、CDocumentCDocument、CViewCView、CDocTemplateCDocTemplate和和CFra
12、meWndCFrameWnd。2009年1月6重庆理工大学计算机科学与技术系11.2.2 CDocument11.2.2 CDocument类类所有文档类都以所有文档类都以CDocumentCDocument类为基类;类为基类;CDocumentCDocument提供的一般成员函数和虚拟成员函数参见教材提供的一般成员函数和虚拟成员函数参见教材P P233233表表11-111-1和教和教材材P P234234表表11-211-2;CDocumentCDocument提供的成员函数中最常用的是提供的成员函数中最常用的是SetModifiedFlag()SetModifiedFlag()和和Upd
13、ateAllViewsUpdateAllViews()();文档内容被修改之后,一般要调用文档内容被修改之后,一般要调用SetModifiedFlag()SetModifiedFlag()来设定一个标志,在来设定一个标志,在MFCMFC关闭文档之前提示用户保存该数据;关闭文档之前提示用户保存该数据;UpdateAllViews()UpdateAllViews()刷新所有和文档关联的视图,实际上该函数调用各个视图刷新所有和文档关联的视图,实际上该函数调用各个视图类的类的OnUpdate()OnUpdate()函数,以保证各个视图之间的同步。函数,以保证各个视图之间的同步。可以通过使用函数可以通过
14、使用函数GetFirstViewPosition()GetFirstViewPosition()和和GetNextView()GetNextView()得到和文得到和文档关联的视图的指针,从而进一步和视图联系,通常代码形式如下:档关联的视图的指针,从而进一步和视图联系,通常代码形式如下:从从CDocumentCDocument类派生新的文档类的一般过程如下:类派生新的文档类的一般过程如下:为每一个文档类型从为每一个文档类型从CDocumentCDocument类派生一个相应的文档类;类派生一个相应的文档类;添加用来存储文档数据的成员变量;添加用来存储文档数据的成员变量;重载重载Serializ
15、eSerialize成员函数,实现文档数据的串行化;成员函数,实现文档数据的串行化;POSITION pos=GetFirstViewPosition();While(pos!=NULL)CView*pView=GetNextView(pos);.2009年1月7重庆理工大学计算机科学与技术系11.2.3 CView11.2.3 CView类类CViewCView类从类从CWndCWnd派生出来,它提供的一般成员函数和虚拟成员函数参见派生出来,它提供的一般成员函数和虚拟成员函数参见教材教材P P235235表表11-311-3和教材和教材P P235235表表11-411-4;一个视图类可以通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 MFC 应用程序 开发
限制150内