版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.1Windows应用程序概述
5.2MFC应用程序框架
5.3消息映射与消息处理
5.4
程序调试
5.5
应用实例第5章MFC应用程序概述5.1Windows应用程序概述Windows应用程序运行于Windows操作系统上,与DOS应用程序有着本质的区别。所有的Windows应用程序都是由消息驱动的,消息处理是所有Windows应用程序的核心。5.1.1窗口窗口是用户界面中最重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是用户与产生该窗口的应用程序之间的可视界面。5.1.2消息和事件Windows是一个基于事件的消息驱动系统,Windows应用程序是按照“事件→消息→处理”非顺序的机制运行的。所谓消息,就是用于描述某个事件发生的信息,而事件是对于Windows的某种操作。事件是因,消息是果,事件产生消息,消息对应事件。所谓消息的处理,其实质就是事件的处理。当有某个事件(如单击鼠标、键盘输入和执行菜单命令等)发生时,Windows会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队列。应用程序从消息队列中取出消息,并根据不同的消息进行不同的处理。5.1.3基本数据类型
Windows编程中常用的基本数据类型的别名。5.1.4句柄句柄是Windows编程的基础,所谓句柄就是Windows使用的一种无重复整数。句柄主要用来标识应用程序中的一个对象,如窗口、实例、菜单、内存、输出设备、控制或文件等。Windows常见的公用句柄类型如下表所示:由于对应的MFC类已对句柄进行了封装,大多数情况下不再需要访问句柄。
5.2MFC应用程序框架
下面通过一个实例介绍利用MFCAppWizard[exe]创建应用程序框架的步骤。5.2.1创建MFC应用程序框架【例5.1】编写一个SDI单文档应用程序,程序运行后,通过消息框输出“这是一个单文档应用程序!”的提示信息。(1)选择File菜单下的New菜单项,系统弹出New对话框。单击输入工程名保存文件路径默认单文档界面(SDI)应用程序。应用程序运行时,只能打开一个文档。多文档界面(MDI)应用程序。应用程序可以同时打开多个文档。基于对话框的应用程序。应用程序将显示一个简单的对话框来处理用户的输入,(2)MFCAppWizard-Step1对话框主要用于选择应用程序类型。AppWizard可以创建3种类型的应用程序框架。语言种类是否支持文档/视图结构(3)MFCAppWizard-Step2of6对话框中主要用于选择应用程序所支持数据库方式。不包含任何数据库支持包含最低限度的数据库支持创建对应表的一个数据库类和一个视图类,不附加标准文件支持创建对应表的一个数据库类和一个视图类,并附加标准文件支持(4)在MFCAppWizard-Step3of6对话框中选择应用程序所支持的复合文档类型。不支持任何复合文档应用程序作为复合文档容器,包含可以链接或嵌入的ActiveX对象应用程序仅仅可以创建能够嵌入到其他应用程序中的文档,但是不能作为一个单独运行的应用程序应用程序可以单独运行,同时也可以作为一个对象嵌入到其他应用程序中应用程序能够作为容器包含嵌入或链接的ActiveX对象,同时也能够作为一个可以嵌入到其他程序中的对象(5)在MFCAppWizard-Step4of6对话框中设置应用程序的外观特征。添加工具栏自动生成状态栏添加打印和打印预览菜单项在帮助菜单中自动添加索引和使用帮助菜单项使应用程序的外观呈三维显示消息应用程序接口应用程序具有TCP/IP通信功能传统风格工具条InternetExplorer风格工具条(6)在MFCAppWizard-Step5of6对话框中设置应用程序的风格。创建标准的MFC应用程序创建类似于Windows资源管理器风格的应用程序在生成的程序框架的源文件中加入注释不加入注释信息使用动态链接库使用静态链接库(7)在MFCAppWizard-Step6of6对话框中,可以设置向导生成的文件名和类名。设置类名设置文件名(8)打开项目工作区中的ClassView类视图,单击CLi2_1View类左边的“+”展开视图类,双击打开OnDraw()函数,并添加代码。voidCLi2_1View::OnDraw(CDC*pDC){ CLi2_1Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere
MessageBox("这是一个单文档应用程序!","消息框",MB_ICONEXCLAMATION|MB_OKCANCEL);}(9)选择Build菜单中的BuildLi2_1.exe菜单项,对工程进行编译和链接,生成可执行文件。再选择Build菜单中的ExecuteLi2_1.exe菜单命令运行程序。MFC应用程序框架结构类的继承关系:5.2.2MFC应用程序框架结构类1.CObject类CObject是MFC类库的根类,它几乎描述了所有MFC类的一些公共特性,并且给所有由它派生出的类提供了3种重要特性,即:串行化支持、运行时类信息支持以及诊断和调试支持。2.CCmdTarget类命令类CCmdTarget是CObject的子类,它是MFC库中所有具有消息映射属性的类的公共基类。从CCmdTarget派生的类能在程序运行时动态创建对象和处理命令消息。3.CWinApp类应用程序类CWinApp是CWinThread的子类,封装了初始化、运行、终止应用程序的代码。可以由此派生自己的应用类。4.CWnd类窗口类CWnd提供了MFC中所有窗口类的基本功能。从CWnd派生的类可以拥有自己的窗口,并对它进行控制。5.CFrameWnd类CFrameWnd类是CWnd类的派生类。它是所有其他框架窗口类的基类,主要用来管理一个窗口。CFrameWnd类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。CFrameWnd类支持单文档界面,对于多文档界面,使用它的两个派生类CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd类用于MDI的主窗口,CMDIChildWnd类用于MDI的子窗口。6.CView类视图类CView是CWnd类的子类。视图类及其派生类用于管理框架窗口的客户区。
7.CDocument类文档类CDocument负责装载和维护文档。文档包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。一个MFC应用程序并不直接操作上述类,而是以上述类为基类派生新的类,从而构建Windows应用程序的基本框架。例如,应用程序Li2_1中的类与这些基类的派生关系:1.应用程序向导生成的文件
下面以例5.1中创建的应用程序为例,介绍MFCAppWizard[exe]向导所生成的各类文件及功能。
5.2.3MFC应用程序分析(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。(2)资源文件Li2_1.rc和Li2_1.rc2:Li2_1.rc文件是程序所使用的所有Windows资源的列表。Li2_1.ico:应用程序的图标所使用的图标文件。Li2_1Doc.ico:应用程序的文档图标文件。文档图标一般显示在多文档程序界面上。Toolbar.bmp:工具栏按钮的位图文件。(3)项目工作区文件和工程文件Li2_1.dsw:保存当前工作区所包含的工程的信息。Li2_1.dsp:包含当前工程的设置、工程中的文件等信息。(4)其他文件Li2_1.clw:该文件是类信息文件。它保存了ClassWizard编辑现有类或增加新类时需使用的类信息,同时还保存了创建、编辑消息映射和成员函数所需的信息。ReadMe.txt:该文件是工程自述文件。主要介绍所创建文件的内容和功能,以及添加用户代码、更改使用语言的方法。2.应用程序的执行过程启动:创建应用程序对象theApp、调用应用程序类的构造函数初始化对象theApp。应用程序框架调用MFC提供的AfxWinMain()主函数。AfxWinMain()主函数,首先通过调用全局函数AfxGetApp()来获取theApp的指针pApp;然后通过该指针调用theApp的成员函数InitInstance()来初始化应用程序。
在应用程序的初始化过程中,同时还构造了文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。当InitInstance()函数执行完毕后,WinMain()函数将调用成员函数
Run(),进入消息处理循环;函数Run()收到WM_QUIT消息。MFC首先调用CWinApp类的成员函数ExitInstance();然后调用静态对象的析构函数;退出应用程序,将控制权交给操作系统。消息对话框
一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。VisualC++提供三个消息对话框函数,它们的原型为:intAfxMessageBox(LPCTSTRlpText,UINTnType=MB_OK,UINTnIDHelp=0);intMessageBox(HWNDhWnd,LPCTSTRlpText,LPCTSTRlpCaption,UINTnType);intCWnd::MessageBox(LPCTSTRlpText,LPCTSTRlpCaption=NULL,UINTnType=MB_OK);5.2.4文档/视图结构
文档/视图体系结构是MFC应用程序框架结构的基石,它定义了一种程序结构,这种结构利用文档对象保存应用程序的数据,依靠视图对象控制视图显示数据,文档与视图的关系是一对多的关系,也就是说,文档中的数据可以以不同的方式显示。5.3消息映射与消息处理
Windows消息主要有3种类型:标准Windows消息、控件消息和命令消息。1.标准Windows消息除WM_COMMAND以外,所有以“WM_”为前缀的消息都是标准Windows消息;由窗口类或视图类处理;都有默认的处理函数,它们在CWnd类中进行了预定义。5.3.1消息的类别及其描述标准的Windows消息又分为3类:键盘消息、鼠标消息和窗口消息。(1)键盘消息键盘消息与键盘某个键的动作相关联。常见的键盘消息有以下几种。WM_KEYDOWN、WM_KEYUP:按下、释放非系统键产生的消息。WM_CHAR:输入非系统字符时产生的消息。(2)鼠标消息鼠标消息涉及到鼠标的单击、双击、拖动等。常用的鼠标消息有以下几种。
WM_MOUSEMOVE:鼠标移动时产生的消息。
WM_RBUTTONDOWN:鼠标右键按下时产生的消息。
WM_LBUTTONDOWN:鼠标左键按下时产生的消息。
WM_LBUTTONDBLCLICK:鼠标双击时产生的消息。(3)窗口消息窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等动作有关。在MFC应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。2.控件消息控件消息是指控件或其他子窗口向父窗口发送的WM_COMMAND消息。与其他标准的Windows消息一样,控件消息也应该在视图类、窗口类中进行处理。但是,如果用户单击按钮控件时,发出的控件通知消息BN_CLICKED将作为命令消息来处理。3.命令消息命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。5.3.2MFC消息映射机制MFC采用消息映射来处理消息;消息映射机制包括一组消息映射宏,用于把一个Windows消息和其消息处理函数联系起来。所有从CCmdTarget类派生出来的类都能够拥有自己的消息映射。与MFC消息映射机制有关的宏有以下3个:DECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP(MyClass,MybaseClass)END_MESSAGE_MAP()为了使用消息映射宏:首先在类定义的结尾用DECLARE_MESSAGE_MAP()宏来声明使用消息映射,该宏表示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。然后在类的实现源文件中用BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()宏来定义消息映射。MFC应用程序MESSAG_MAP消息映射的形式如下:BEGIN_MESSAGE_MAP(MyClass,MybaseClass)//{{AFX_MSG_MAP(MyClass)//ClassWizard维护消息映射宏的标记
ON_... //MFC预定义消息映射宏
ON_MESSAGE(message,memberFun)//用户自定义消息映射宏
//}}AFX_MSG_MAPEND_MESSAGE_MAP()其中,MyClass是拥有消息映射的派生类名,MybaseClass是其基类名。【例5.2】利用ClassWizard为例5.1中生成的应用程序添加鼠标右键按下消息,即WM_RBUTTONDOWN消息,并为File菜单下的Open菜单项添加消息处理函数,分析ClassWizard类向导所进行的消息映射。5.3.3自
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024标准绿化施工合同样本
- 水渠建造合同模板
- 空白用工合同范例
- 租赁工程推土机合同范例
- 二零二四年度计算机软件开发项目合作合同
- 淄博吊车租赁合同模板
- 私人公司入股合同范例
- 二零二四年度金融投资公司股权投资合同
- 租单间转租合同范例
- 玫瑰买卖合同模板
- GB/T 44676-2024电动自行车售后服务规范
- 江苏省南京市五校联盟2024-2025学年高三上学期期中考试化学试题
- 国开(吉林)2024年《兽医临床诊疗技术》形成性测试1-3终考答案
- 24年追觅在线测评28题及答案
- 《思想道德修养与法律基础》课件-4发扬中国革命道德
- 《陆上风电场工程概算定额》NBT 31010-2019
- 第五章 中国特色社会主义理论体系的形成发展(一)
- 新版中国食物成分表
- 《关于早恋教育》主题班会上课版1
- 河北建新化工股份有限公司新型环保材料水煤浆添加剂建设项目环境影响报告表
- 天越软件使用方法Word版
评论
0/150
提交评论