




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 6 讲 MFC应用程序概述 1、Windows应用程序概述 2、MFC应用程序框架 3、消息映射与消息处理 4、程序调试 5、应用实例,2,6.1 Windows应用程序概述,Windows应用程序运行于Windows操作系统上,与DOS应用程序有着本质的区别。 所有的Windows应用程序都是由消息驱动的,消息处理是所有Windows应用程序的核心。,3,1、消息和事件,Windows是一个基于事件的消息驱动系统,Windows应用程序是按照“事件消息处理”非顺序的机制运行的。,消息的处理:其实质就是事件的处理。当有某个事件(如单击鼠标、键盘输入和执行菜单命令等)发生时,Windows会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队列。应用程序从消息队列中取出消息,并根据不同的消息进行不同的处理。,消息:用于描述某个事件发生的信息,而事件是对Windows的某种操作。事件是因,消息是果,事件产生消息,消息对应事件。,4,5,2、句柄,句柄是Windows编程的基础,句柄本质是Windows使用的一种无重复整数。 句柄主要用来标识应用程序中的一个对象,如窗口、实例、菜单、内存、输出设备、控制或文件等。,6,由于对应的MFC类已对句柄进行了封装,大多数情况下不再需要访问句柄。,7,6.2 MFC应用程序框架,利用MFC AppWizardexe创建应用程序框架。,一、 创建MFC应用程序框架,MFC:Microsoft Foundation Class,一套专门用于Windows编程的基础类库,它的类可以处理许多标准的Windows编程任务。,实例1:编写一个单文档的应用程序,程序运行时,通过消息框输出“这是一个单文档应用程序!”。,8,MFC应用程序框架结构类的继承关系:,二、 MFC应用程序框架结构类,9,1.CObject类 CObject是MFC类库的根类,它几乎描述了所有MFC类的一些公共特性,并且给所有由它派生出的类提供了3种重要特性,即:串行化支持、运行时类信息支持以及诊断和调试支持。,2.CCmdTarget类 命令类CCmdTarget是CObject的子类,是MFC库中所有具有消息映射属性的类的公共基类。从CCmdTarget派生的类能在程序运行时动态创建对象和处理命令消息。,10,3.CWinApp类 应用程序类CWinApp是CWinThread的子类,封装了初始化、运行、终止应用程序的代码。可以由此派生自己的应用类。,4.CWnd类 窗口类CWnd提供了MFC中所有窗口类的基本功能。从CWnd派生的类可以拥有自己的窗口,并对它进行控制。,11,5.CFrameWnd类 CFrameWnd类是CWnd类的派生类。它是所有其他框架窗口类的基类,主要用来管理一个窗口。,CFrameWnd类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。CFrameWnd类支持单文档界面,对于多文档界面,使用它的两个派生类CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd类用于MDI的主窗口,CMDIChildWnd类用于MDI的子窗口。,12,6.CView类 视图类CView是CWnd类的子类。视图类及其派生类用于管理框架窗口的客户区。,7.CDocument类 文档类CDocument负责装载和维护文档。文档包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。,13,一个MFC应用程序并不直接操作以上的类,而是以上类为基类派生的新类,构建Windows应用程序基本框架。 如应用程序的类与这些基类的派生关系:,14,(1) 头文件与实现文件 MainFrm.h和MainFrm.cpp:定义和实现窗口框架类CMainFrame。 TestDoc.h和TestDoc.cpp:定义和实现文档类CTestDoc。 TestView.h 和TestView.cpp:定义和实现视图类CTestView。 Test.h 和Test.cpp:定义和实现应用程序类CTestApp。 Resource.h:定义工程中所有资源标识符,给资源ID分配一个整数值。 StdAfx.h和StdAfx.cpp:用于建立一个预编译的头文件Test.PCH和一个预定义的类型文件StdAfx.obj。,1.应用程序向导生成的文件,三、MFC应用程序分析,15,(2) 资源文件 Test.rc和Test.rc2:Test.rc文件是程序所使用的所有Windows资源的列表。 Test.ico:应用程序的图标所使用的图标文件。 TestDoc.ico:应用程序的文档图标文件。文档图标一般显示在多文档程序界面上。 Toolbar.bmp:工具栏按钮的位图文件。,16,(3) 项目工作区文件和工程文件 Test.dsw:保存当前工作区所包含的工程的信息。 Test.dsp:包含当前工程的设置、工程中的文件等信息。,17,(4) 其他文件 Test.clw:该文件是类信息文件。它保存了ClassWizard编辑现有类或增加新类时需使用的类信息,同时还保存了创建、编辑消息映射和成员函数所需的信息。 ReadMe.txt:该文件是工程自述文件。主要介绍所创建文件的内容和功能,以及添加用户代码、更改使用语言的方法。,18,2.应用程序的执行过程,然后通过该指针调用theApp的成员函数InitInstance( )来初始化应用程序。,启动:创建应用程序对象theApp、调用应用程序类的构造函数初始化对象theApp。,应用程序框架调用MFC提供的AfxWinMain( )主函数。,AfxWinMain( )主函数,首先通过调用全局函数AfxGetApp( )来获取theApp的指针pApp;,19,在应用程序的初始化过程中,同时还构造文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。 当InitInstance( )函数执行完毕后,WinMain( )函数将调用成员函数 Run( ),进入消息处理循环; 函数Run( )收到WM_QUIT消息。 MFC首先调用CWinApp类的成员函数ExitInstance( ); 然后调用静态对象的析构函数; 退出应用程序,将控制权交给操作系统。,20,消息对话框,一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。Visual C+提供三个消息对话框函数,它们的原型为: int AfxMessageBox(LPCTSTR lpText,UINT nType=MB_OK,UINT nIDHelp=0); int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT nType); int CWnd:MessageBox(LPCTSTR lpText,LPCTSTR lpCaption=NULL,UINT nType= MB_OK);,21,22,四、 文档/视图结构,文档视图体系结构是MFC应用程序框架结构的基石,定义了一种程序结构,利用文档对象保存应用程序的数据,依靠视图对象控制视图显示数据,文档与视图的关系是一对多的关系,即文档中的数据可以以不同的方式显示。,23,24,6.3 消息映射与消息处理,消息映射是将消息处理函数与它要处理的特定消息连接起来的一种机制。,【例6.2】 利用ClassWizard为例中生成的应用程序添加鼠标右键按下消息,即WM_RBUTTONDOWN消息,并为File菜单下的Open菜单项添加消息处理函数,分析ClassWizard类向导所进行的消息映射。,25,应用程序的执行过程,然后通过该指针调用theApp的成员函数InitInstance( )来初始化应用程序。,启动:创建应用程序对象theApp、调用应用程序类的构造函数初始化对象theApp。,应用程序框架调用MFC提供的AfxWinMain( )主函数。,AfxWinMain( )主函数,首先通过调用全局函数AfxGetApp( )来获取theApp的指针pApp;,26,在应用程序的初始化过程中,同时还构造文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。 当InitInstance( )函数执行完毕后,AfxWinMain( )函数将调用成员函数 Run( ),进入消息处理循环;当没有窗口消息需要处理时,OnIdle函数被窗口框架调用。 函数Run( )收到WM_QUIT消息。 MFC首先调用CWinApp类的成员函数ExitInstance( ); 然后调用静态对象的析构函数; 退出应用程序,将控制权交给操作系统。,27,6.3 消息映射与消息处理,消息映射是将消息处理函数与它要处理的特定消息连接起来的一种机制。,根据消息来源可把消息分为系统定义的消息和应用程序定义消息。,一、 消息的类别及其描述,系统定义的消息都有一个唯一的标识,即一个符号常量。,BM_ 表示按钮控制消息; CB_ 表示组合框控制消息 DM_ 表示默认下压式按钮控制消息; EM_ 表示编辑控制消息 LB_ 表示列表框控制消息; SBM_ 表示滚动条控制消息 WM_ 表示窗口消息,标识符号常量范围是:0WM_USER-1 (0x800000xBFFFF)。,28,6.3 消息映射与消息处理,一、 消息的类别及其描述,根据消息来源可把消息分为系统定义的消息和应用程序定义消息。,应用程序消息是应用程序创建的,用于自己窗口或其他应用程序交互的消息。标识符号常量范围是:WM_USER(0x0400)0x7FFF或0xC0000x7FFF F。 WM_USER(0x0400)0x7FFF 范围的消息由应用程序自己使用, 0xC0000x7FFF F 范围消息用来和其他应用程序通信。,29,6.3 消息映射与消息处理,一、 消息的类别及其描述,根据消息发送的目的地来看,消息可分为队列消息和非队列消息。,Windows系统维护一个系统消息队列,每个GUI线程有一个线程消息队列。所有队列消息都被发送到系统消息队列,鼠标消息、键盘消息和WM_PAINT、WM_TIME和WM_QUIT是队列消息,其他绝大多数消息都是非队列消息。,30,6.3 消息映射与消息处理,从MFC编程应用来说Windows消息主要有3种类型:标准Windows消息、控件消息和命令消息。,一、 消息的类别及其描述,1标准Windows消息 除WM_COMMAND以外,所有以“WM_”为前缀的消息都是标准Windows消息; 由窗口类或视图类处理; 都有默认的处理函数,它们在CWnd类中进行了预定义。,31,标准的Windows消息又分为3类: 键盘消息、鼠标消息和窗口消息。,(1)键盘消息 键盘消息与键盘某个键的动作相关联。常见的键盘消息有以下几种。,WM_KEYDOWN、WM_KEYUP:按下、释放非系统键产生的消息。 WM_CHAR:输入非系统字符时产生的消息。,32,(2) 鼠标消息 鼠标消息涉及到鼠标的单击、双击、拖动等。,WM_MOUSEMOVE:鼠标移动时产生的消息。 WM_RBUTTONDOWN:鼠标右键按下时产生的消息。 WM_LBUTTONDOWN:鼠标左键按下时产生的消息。 WM_LBUTTONDBLCLICK:鼠标双击时产生的消息。,33,(3) 窗口消息 窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等动作有关。 在MFC应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。,34,2.控件消息 控件消息是指控件或其他子窗口向父窗口发送的WM_COMMAND消息。,与其他标准的Windows消息一样,控件消息也应该在视图类、窗口类中进行处理。但是,如果用户单击按钮控件时,发出的控件通知消息BN_CLICKED将作为命令消息来处理。,35,3.命令消息 命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。,命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。,36,二、 消息的发送与接收,Windows系统中消息发送包括三种方式:发送、投递和广播。,消息发送方式与使用的函数,消息的接收主要有3个函数: GetMessage、PeekMessage和WaitMessage。,37,传统的SDK程序消息处理:主函数WinMain使用函数CreateWindow将窗口和窗口类的窗口过程处理函数类绑定在一起。通过消息循环和相应函数,窗口的所有消息都发送到窗口类的窗口过程函数WndPro,在根据消息的内容匹配相应的Case子句实现响应。,每个类对于它可能接收到的每个消息就必须有一个虚拟函数来实现处理。无论是消息数量,还是MFC中都不允许此种消息处理机制。,消息映射就是让用户可以指定某个具有消息处理能力的类来处理某个消息。就是将一个个消息与其处理函数相互关联,构成一张巨大的消息及其处理函数的一一对应表,用户只需在处理函数中添加自己的代码便可实现特定的动作。,38,三、 MFC消息映射机制,MFC采用消息映射来处理消息; 消息映射机制包括一组消息映射宏,把一个Windows消息和其消息处理函数联系起来。 所有从CCmdTarget类派生出来的类都能够拥有自己的消息映射。 与MFC消息映射机制有关的宏有以下3个: DECLARE_MESSAGE_MAP( ) BEGIN_MESSAGE_MAP(MyClass, MybaseClass) END_MESSAGE_MAP( ),39,为了使用消息映射宏: 首先在类定义的结尾用DECLARE_MESSAGE_MAP( )宏来声明使用消息映射,该宏表示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。,然后在类的实现源文件中用BEGIN_MESSAGE_MAP( )和END_MESSAGE_MAP( )宏来定义消息映射。,40,BEGIN_MESSAGE_MAP(MyClass, MybaseClass) / AFX_MSG_MAP (MyClass) /ClassWizard维护消息映射宏的标记 ON_. /MFC预定义消息映射宏 ON_MESSAGE(message, memberFun)/用户自定义消息映射宏 / AFX_MSG_MAP END_MESSAGE_MAP() 其中,MyClass是拥有消息映射的派生类名,MybaseClass 是其基类名。,MFC应用程序MESSAG_MA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年4月智能储物柜采购物品识别准确率标准
- 山东省青岛市城阳区2024-2025学年五年级数学第二学期期末考试模拟试题含答案
- 天门职业学院《广告研究》2023-2024学年第二学期期末试卷
- 四川省渠县九校2024-2025学年初三一模(期末)英语试题含答案
- 泰州职业技术学院《幼儿园教育教学》2023-2024学年第二学期期末试卷
- 江苏省宿迁市沭阳县重点名校2025年初三摸底联考物理试题文试题含解析
- 江西省南昌市进贤一中2025届高三年级下学期第一次考试生物试题试卷含解析
- 武汉工贸职业学院《工程项目评估》2023-2024学年第二学期期末试卷
- 湖南省张家界市永定区2025届初三年级模拟考试(一)语文试题含解析
- 江苏省南京市二十九中学2024-2025学年初三第一次阶段考试英语试题含答案
- 2024年浙江长征职业技术学院单招综合素质考试题库附答案
- 2025届安徽省池州市普通高中高三下学期教学质量统一监测物理试卷(含答案)
- 库房管理工作职责与规范化
- Unit 3Keep Fit.教案2024-2025学年人教版(2024)七年级英语下册
- 专题06文学文化常识中考语文一轮复习
- WMS仓库管理系统采购协议
- 2024国家数字化范式与路径-公共政策立场-67正式版
- 2025年河南工业和信息化职业学院单招职业技能测试题库必考题
- 瑞吉欧幼儿教育
- 2025年中国人寿招聘笔试笔试参考题库附带答案详解
- 中国输电线路在线监测系统行业发展状况及前景规模调查报告2025-2030年
评论
0/150
提交评论