第2章MFC应用程序概述2.1Windows应用程序概述2.2MFC应用程序框架2.3消息映射与消息处理2.4程序调试2.5应用实例VisualC++程序设计与应用教程VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述22.1Windows应用程序概述Windows应用程序运行于Windows操作系统上,与DOS应用程序有着本质的区别。所有的Windows应用程序都是由消息驱动的,消息处理是所有Windows应用程序的核心。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述32.1.1窗口窗口是用户界面中最重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是用户与产生该窗口的应用程序之间的可视界面。标题栏菜单栏编辑区垂直滚动条水平滚动条最小化按钮最大化按钮关闭按钮VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述42.1.2消息和事件Windows是一个基于事件的消息驱动系统,Windows应用程序是按照“事件→消息→处理”的机制运行的。所谓消息,就是用于描述某个事件发生的信息,而事件是对于Windows的某种操作。事件是因,消息是果,事件产生消息,消息对应事件。所谓消息的处理,其实质就是事件的处理。当有某个事件(如单击鼠标、键盘输入和执行菜单命令等)发生时,Windows会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队列。应用程序从消息队列中取出消息,并根据不同的消息进行不同的处理。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述52.1.3基本数据类型Windows编程中常用的基本数据类型的别名。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述6VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述72.1.4句柄句柄是Windows编程的基础,所谓句柄就是Windows使用的一种无重复整数。句柄主要用来标识应用程序中的一个对象,如窗口、实例、菜单、内存、输出设备、控制或文件等。Windows常见的公用句柄类型如下表所示:VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述8VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述9由于对应的MFC类已对句柄进行了封装,大多数情况下不再需要访问句柄。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述102.2MFC应用程序框架下面通过一个实例介绍利用MFCAppWizard[exe]创建应用程序框架的步骤。2.2.1创建MFC应用程序框架VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述11【例2.1】编写一个SDI单文档应用程序Li2_1,程序运行后,通过消息框输出“这是一个单文档应用程序!”的提示信息。(1)选择File菜单下的New菜单项,系统弹出New对话框。单击输入项目名保存文件路径默认VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述12单文档界面(SDI)应用程序。应用程序运行时,只能打开一个文档。多文档界面(MDI)应用程序。应用程序可以同时打开多个文档。基于对话框的应用程序。应用程序将显示一个简单的对话框来处理用户的输入,(2)MFCAppWizard-Step1对话框主要用于选择应用程序类型。AppWizard可以创建3种类型的应用程序框架。语言种类是否支持文档/视图结构VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述13(3)MFCAppWizard-Step2of6对话框中主要用于选择应用程序所支持数据库方式。不包含任何数据库支持包含最低限度的数据库支持创建对应表的一个数据库类和一个视图类,不附加标准文件支持创建对应表的一个数据库类和一个视图类,并附加标准文件支持VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述14(4)在MFCAppWizard-Step3of6对话框中选择应用程序所支持的复合文档类型。不支持任何复合文档应用程序作为复合文档容器,包含可以链接或嵌入的ActiveX对象应用程序仅仅可以创建能够嵌入到其他应用程序中的文档,但是不能作为一个单独运行的应用程序应用程序可以单独运行,同时也可以作为一个对象嵌入到其他应用程序中应用程序能够作为容器包含嵌入或链接的ActiveX对象,同时也能够作为一个可以嵌入到其他程序中的对象VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述15(5)在MFCAppWizard-Step4of6对话框中设置应用程序的外观特征。添加工具栏自动生成状态栏添加打印和打印预览菜单项在帮助菜单中自动添加索引和使用帮助菜单项使应用程序的外观呈三维显示消息应用程序接口应用程序具有TCP/IP通信功能传统风格工具条InternetExplorer风格工具条VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述16(6)在MFCAppWizard-Step5of6对话框中设置应用程序的风格。创建标准的MFC应用程序创建类似于Windows资源管理器风格的应用程序在生成的程序框架的源文件中加入注释不加入注释信息使用动态链接库使用静态链接库VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述17(7)在MFCAppWizard-Step6of6对话框中,可以设置向导生成的文件名和类名。设置类名设置文件名VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述18(8)打开项目工作区中的ClassView类视图,单击CLi2_1View类左边的“+”展开视图类,双击打开OnDraw()函数,并添加代码。voidCLi2_1View::OnDraw(CDC*pDC){CLi2_1Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereMessageBox(这是一个单文档应用程序!,消息框,MB_ICONEXCLAMATION|MB_OKCANCEL);}VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述19(9)选择Build菜单中的BuildLi2_1.exe菜单项,对工程进行编译和链接,生成可执行文件。再选择Build菜单中的ExecuteLi2_1.exe菜单命令运行程序。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述20MFC应用程序框架结构类的继承关系:2.2.2MFC应用程序框架结构类CCmdTargetCWinThreadCWndCDocumentCDocTemplateCWinAppCViewCFrameWndCMDIChildWndCMDIFrameWndCSingleDocTemplateCMultiDocTemplateCObjectVisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述211.CObject类CObject是MFC类库的根类,它几乎描述了所有MFC类的一些公共特性,并且给所有由它派生出的类提供了3种重要特性,即:串行化支持、运行时类信息支持以及诊断和调试支持。2.CCmdTarget类命令类CCmdTarget是CObject的子类,它是MFC库中所有具有消息映射属性的类的公共基类。从CCmdTarget派生的类能在程序运行时动态创建对象和处理命令消息。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述223.CWinApp类应用程序类CWinApp是CWinThread的子类,封装了初始化、运行、终止应用程序的代码。可以由此派生自己的应用类。4.CWnd类窗口类CWnd提供了MFC中所有窗口类的基本功能。从CWnd派生的类可以拥有自己的窗口,并对它进行控制。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述235.CFrameWnd类CFrameWnd类是CWnd类的派生类。它是所有其他框架窗口类的基类,主要用来管理一个窗口。CFrameWnd类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。CFrameWnd类支持单文档界面,对于多文档界面,使用它的两个派生类CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd类用于MDI的主窗口,CMDIChildWnd类用于MDI的子窗口。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述246.CView类视图类CView是CWnd类的子类。视图类及其派生类用于管理框架窗口的客户区。7.CDocument类文档类CDocument负责装载和维护文档。文档包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述25一个MFC应用程序并不直接操作上述类,而是以上述类为基类派生新的类,从而构建Windows应用程序的基本框架。例如,应用程序Li2_1中的类与这些基类的派生关系:类名称基类说明CLi2_1AppCMainFrameCLi2_1ViewCLi2_1DocCWinAppCFrameWndCViewCDocument应用程序类框架窗口类视图类文档类VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述261.应用程序向导生成的文件下面以例2.1中创建的应用程序Li2_1为例,介绍MFCAppWizard[exe]向导所生成的各类文件及功能。2.2.3MFC应用程序分析VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述27(1)头文件与实现文件MainFrm.h和MainFrm.cpp:定义和实现窗口框架类CMainFrame。CLi2_1Doc.h和CLi2_1Doc.cpp:定义和实现文档类CLi2_1Doc。CLi2_1View.h和CLi2_1View.cpp:定义和实现视图类CLi2_1View。CLi2_1.h和CLi2_1.cpp:定义和实现应用程序类CLi2_1App。Resource.h:定义工程中所有资源标识符,给资源ID分配一个整数值。StdAfx.h和StdAfx.cpp:用于建立一个预编译的头文件CLi2_1.PCH和一个预定义的类型文件StdAfx.obj。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述28(2)资源文件Li2_1.rc和Li2_1.rc2:Li2_1.rc文件是程序所使用的所有Windows资源的列表。Li2_1.ico:应用程序的图标所使用的图标文件。Li2_1Doc.ico:应用程序的文档图标文件。文档图标一般显示在多文档程序界面上。Toolbar.bmp:工具栏按钮的位图文件。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述29(3)项目工作区文件和工程文件Li2_1.dsw:保存当前工作区所包含的工程的信息。Li2_1.dsp:包含当前工程的设置、工程中的文件等信息。VisualC++程序设计与应用教程2019/12/20第2章MFC应用程序概述30(4)其他文件Li2_1.clw:该文件是类信息文件。它保存了ClassWizard编辑现有类或增加新类时需使用的类信息,同时还保存了创建、编辑消息映射和成员函数所需的信息。ReadMe.txt:该文件是工程自述文件。主要介绍所创建文件的内容和功能,以及添加用户代码、