版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第 2 2 章章 MFCMFC应用程序概述应用程序概述 2.1 Windows应用程序概述 2.2 MFC应用程序框架 2.3 消息映射与消息处理 2.4 程序调试 2.5 应用实例Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 22.1 Windows应用程序概述应用程序概述 Windows Windows应用程序运行于应用程序运行于WindowsWindows操作系统上,操作系统上,与与DOSDOS应用程序有着本质的区别。应用程序有着本质的区别。 所有的所有的WindowsWindows应用程序都是由消息驱动的,消应用程序都是由
2、消息驱动的,消息处理是所有息处理是所有WindowsWindows应用程序的核心。应用程序的核心。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 32.1.1 2.1.1 窗口窗口 窗口是用户界面中最重要的部分。它是屏幕窗口是用户界面中最重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是上与一个应用程序相对应的矩形区域,是用户与用户与产生该窗口的应用程序之间的可视界面产生该窗口的应用程序之间的可视界面。 标题栏 菜单栏 编辑区 垂直滚动条 水平滚动条 最小化按钮 最大化按钮 关闭按钮 Visual C+程序设计与应用教程2021
3、/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 42.1.2 消息和事件消息和事件 Windows是一个基于事件的消息驱动系统,是一个基于事件的消息驱动系统,Windows应用程序是按照应用程序是按照“事件事件消息消息处理处理” 的机制的机制运行的。运行的。 所谓所谓消息消息,就是用于描述某个事件发生的信息,而,就是用于描述某个事件发生的信息,而事件是对于事件是对于Windows的某种操作。事件是因,消息是果,的某种操作。事件是因,消息是果,事件产生消息,消息对应事件。事件产生消息,消息对应事件。 所谓所谓消息的处理消息的处理,其实质就是事件的处理。当有某,其实质就是事件的处理
4、。当有某个事件个事件(如单击鼠标、键盘输入和执行菜单命令等如单击鼠标、键盘输入和执行菜单命令等)发生时,发生时,Windows会根据具体的事件产生对应的消息,并发送到会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队列。应用程序从消息队列中取出消指定应用程序的消息队列。应用程序从消息队列中取出消息,并根据不同的消息进行不同的处理。息,并根据不同的消息进行不同的处理。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 52.1.3 基本数据类型基本数据类型 Windows编程中常用的基本数据类型的别名编程中常用的基本数据类型的别名
5、。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 6Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 72.1.4 句柄句柄 句柄是句柄是Windows编程的基础,所谓编程的基础,所谓句柄句柄就是就是Windows使用的一种无重复整数使用的一种无重复整数。 句柄主要用来标识应用程序中的一个对象,如窗口、句柄主要用来标识应用程序中的一个对象,如窗口、实例、菜单、内存、输出设备、控制或文件等实例、菜单、内存、输出设备、控制或文件等。 Windows常见的公用句柄类型如下表所示:常见
6、的公用句柄类型如下表所示:Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 8Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 9由于对应的由于对应的MFCMFC类已对句柄进行类已对句柄进行了封装,大多数了封装,大多数情况下不再需要情况下不再需要访问句柄。访问句柄。 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 102.2 MFC2.2 MFC应用程序框架应用程序框架 下面通过一个实例介绍利用下面通过一个实例介绍利用M
7、FC AppWizardexe创建应用程序框架的步骤。创建应用程序框架的步骤。2.2.1 创建创建MFC应用程序框架应用程序框架 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 11【例【例2.12.1】编写一个】编写一个SDISDI单文档应用程序单文档应用程序Li2_1Li2_1,程序运行后,程序运行后,通过消息框输出通过消息框输出“这是一个单文档应用程序!这是一个单文档应用程序!”的提示信息。的提示信息。 (1) 选择File菜单下的New菜单项,系统弹出New对话框。 单击单击输入输入项目名保存文件路径默认默认Visual C+
8、程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 12 单文档界面单文档界面(SDI)(SDI)应用应用程序。应用程序运行时,程序。应用程序运行时,只能打开一个文档。只能打开一个文档。多文档界面多文档界面(MDI)(MDI)应用应用程序。应用程序可以同程序。应用程序可以同时打开多个文档。时打开多个文档。基于对话框的应用程序。基于对话框的应用程序。应用程序将显示一个简应用程序将显示一个简单的对话框来处理用户单的对话框来处理用户的输入,的输入, (2) MFC AppWizard-Step 1 (2) MFC AppWizard-Step 1对话框主要用于选
9、择应用程序对话框主要用于选择应用程序类型。类型。AppWizardAppWizard可以创建可以创建3 3种类型的应用程序框架。种类型的应用程序框架。语言种类语言种类是否支持是否支持文档文档/ /视图视图结构结构Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 13(3)MFC AppWizard-Step 2 of 6(3)MFC AppWizard-Step 2 of 6对话框中主要用于选择对话框中主要用于选择应用程序所支持数据库方式。应用程序所支持数据库方式。 不包含任何数据库支持不包含任何数据库支持包含最低限度的数据库包含最低限
10、度的数据库支持支持创建对应表的一个数据创建对应表的一个数据库类和一个视图类,不库类和一个视图类,不附加标准文件支持附加标准文件支持创建对应表的一个数据创建对应表的一个数据库类和一个视图类,并库类和一个视图类,并附加标准文件支持附加标准文件支持Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 14(4)(4)在在MFC AppWizard-Step 3 of 6MFC AppWizard-Step 3 of 6对话框中选择对话框中选择应用程应用程序所支持的复合文档类型序所支持的复合文档类型。 不支持任何复合文档不支持任何复合文档应用程序作
11、为复合文档容器,包含应用程序作为复合文档容器,包含可以链接或嵌入的可以链接或嵌入的ActiveXActiveX对象对象应用程序仅仅可以创建能够嵌入到应用程序仅仅可以创建能够嵌入到其他应用程序中的文档,但是不能其他应用程序中的文档,但是不能作为一个单独运行的应用程序作为一个单独运行的应用程序应用程序可以单独运行,同时也可应用程序可以单独运行,同时也可以作为一个对象嵌入到其他应用程以作为一个对象嵌入到其他应用程序中序中应用程序能够作为容器包含嵌入或应用程序能够作为容器包含嵌入或链接的链接的ActiveXActiveX对象,同时也能够对象,同时也能够作为一个可以嵌入到其他程序中的作为一个可以嵌入到其
12、他程序中的对象对象Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 15(5)(5)在在MFC AppWizard-Step 4 of 6MFC AppWizard-Step 4 of 6对话框中设置应用程对话框中设置应用程序的外观特征。序的外观特征。 添加工具栏添加工具栏自动生成状态栏自动生成状态栏添加打印和打印预览菜单项添加打印和打印预览菜单项在帮助菜单中自动添加索引和在帮助菜单中自动添加索引和使用帮助菜单项使用帮助菜单项使应用程序的外观呈三维显示使应用程序的外观呈三维显示消息应用程序接口消息应用程序接口应用程序具有应用程序具有TC
13、P/IPTCP/IP通信功能通信功能传统风格工具条传统风格工具条Internet ExplorerInternet Explorer风格工具条风格工具条Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 16(6) (6) 在在MFC AppWizard-Step 5 of 6MFC AppWizard-Step 5 of 6对话框中设置应用程序对话框中设置应用程序的风格。的风格。 创建标准的创建标准的MFCMFC应用程序应用程序创建类似于创建类似于WindowsWindows资源管资源管理器风格的应用程序理器风格的应用程序在生成的程序框
14、架的源文在生成的程序框架的源文件中加入注释件中加入注释不加入注释信息不加入注释信息使用动态链接库使用动态链接库 使用静态链接库使用静态链接库 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 17(7) (7) 在在MFC AppWizard-Step 6 of 6MFC AppWizard-Step 6 of 6对话框中,可以设对话框中,可以设置向导生成的文件名和类名。置向导生成的文件名和类名。 设置类名设置类名设置文件名设置文件名Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概
15、述 18(8)(8)打开项目工作区中的打开项目工作区中的ClassViewClassView类视图,单击类视图,单击CLi2_1ViewCLi2_1View类左边的类左边的“+”+”展开视图类,双击打开展开视图类,双击打开OnDrawOnDraw()()函数,并添加代码。函数,并添加代码。void CLi2_1View:OnDraw(CDC* pDC)CLi2_1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereMessageBox(这是一个单文档应用程序!这是一个单文档
16、应用程序!, 消息框消息框, MB_ICONEXCLAMATION|MB_OKCANCEL);Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 19(9) (9) 选择选择BuildBuild菜单中的菜单中的Build Li2_1.exeBuild Li2_1.exe菜单项,对工菜单项,对工程进行编译和链接,生成可执行文件。再选择程进行编译和链接,生成可执行文件。再选择BuildBuild菜菜单中的单中的Execute Li2_1.exeExecute Li2_1.exe菜单命令运行程序。菜单命令运行程序。Visual C+程序设计与应
17、用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 20MFCMFC应用程序框架结构类的继承关系:应用程序框架结构类的继承关系: 2.2.2 MFC应用程序框架结构类应用程序框架结构类CCmdTargetCWinThreadCWndCDocumentCDocTemplateCWinAppCViewCFrameWndCMDIChildWndCMDIFrameWndCSingleDocTemplateCMultiDocTemplateCObject Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 211.CObj
18、ect1.CObject类类 CObjectCObject是是MFCMFC类库的根类,它几乎描述了所有类库的根类,它几乎描述了所有MFCMFC类的一些公共特性,并且给所有由它派生出的类类的一些公共特性,并且给所有由它派生出的类提供了提供了3 3种重要特性种重要特性, ,即:串行化支持、运行时类信即:串行化支持、运行时类信息支持以及诊断和调试支持。息支持以及诊断和调试支持。 2.CCmdTarget2.CCmdTarget类类 命令类命令类CCmdTargetCCmdTarget是是CObjectCObject的子类,它是的子类,它是MFCMFC库中所有具有消息映射属性的类的公共基类。从库中所有
19、具有消息映射属性的类的公共基类。从CCmdTargetCCmdTarget派生的类能在程序运行时动态创建对象派生的类能在程序运行时动态创建对象和处理命令消息。和处理命令消息。 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 223.CWinApp3.CWinApp类类 应用程序类应用程序类CWinAppCWinApp是是CWinThreadCWinThread的子类,封的子类,封装了初始化、运行、终止应用程序的代码。可以装了初始化、运行、终止应用程序的代码。可以由此派生自己的应用类。由此派生自己的应用类。4.CWnd4.CWnd类类
20、窗口类窗口类CWndCWnd提供了提供了MFCMFC中所有窗口类的基本中所有窗口类的基本功能。从功能。从CWndCWnd派生的类可以拥有自己的窗口,并派生的类可以拥有自己的窗口,并对它进行控制。对它进行控制。 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 235.CFrameWnd5.CFrameWnd类类 CFrameWndCFrameWnd类是类是CWndCWnd类的派生类。它是所有其他类的派生类。它是所有其他框架窗口类的基类,主要用来管理一个窗口。框架窗口类的基类,主要用来管理一个窗口。 CFrameWndCFrameWnd类
21、的对象是一个框架窗口,包括边框、类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。的视图。CFrameWndCFrameWnd类支持单文档界面,对于多文档类支持单文档界面,对于多文档界面,使用它的两个派生类界面,使用它的两个派生类CMDIFrameWndCMDIFrameWnd和和CMDIChildWndCMDIChildWnd。CMDIFrameWndCMDIFrameWnd类用于类用于MDIMDI的主窗口,的主窗口,CMDIChildWndCMDIChildWnd类用于类用于MDIMDI的子窗口。的子窗口。
22、 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 246.CView6.CView类类 视图类视图类CViewCView是是CWndCWnd类的子类。视图类及其派类的子类。视图类及其派生类用于管理框架窗口的客户区。生类用于管理框架窗口的客户区。7.CDocument7.CDocument类类 文档类文档类CDocumentCDocument负责装载和维护文档。文档负责装载和维护文档。文档包括应用程序的工作成果或环境设置数据等,可包括应用程序的工作成果或环境设置数据等,可以是程序需要保存的任何内容。以是程序需要保存的任何内容。 Visu
23、al C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 25 一个一个MFCMFC应用程序并不直接操作上述类,而是以上述类为应用程序并不直接操作上述类,而是以上述类为基类派生新的类,从而构建基类派生新的类,从而构建WindowsWindows应用程序的基本框架。应用程序的基本框架。 例如,应用程序例如,应用程序Li2_1Li2_1中的类与这些基类的派生关系中的类与这些基类的派生关系: : 类名称 基 类 说 明 CLi2_1App CMainFrame CLi2_1View CLi2_1Doc CWinApp CFrameWnd CView CDoc
24、ument 应用程序类 框架窗口类 视图类 文档类 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 261.1.应用程序向导生成的文件应用程序向导生成的文件 下面以例下面以例2.12.1中创建的应用程序中创建的应用程序Li2_1Li2_1为例,介绍为例,介绍MFC AppWizardexeMFC AppWizardexe向导所生成的各类文件及功能。向导所生成的各类文件及功能。 2.2.3 MFC应用程序分析应用程序分析Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 27(1)
25、 头文件与实现文件头文件与实现文件 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分配一个整数值。分配一个整
26、数值。StdAfx.h和和StdAfx.cpp:用于建立一个预编译的头:用于建立一个预编译的头文件文件CLi2_1.PCH和一个预定义的类型文件和一个预定义的类型文件StdAfx.obj。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 28(2) 资源文件资源文件Li2_1.rc和和Li2_1.rc2:Li2_1.rc文件是程序所使用的文件是程序所使用的所有所有Windows资源的列表。资源的列表。Li2_1.ico:应用程序的图标所使用的图标文件。:应用程序的图标所使用的图标文件。Li2_1Doc.ico:应用程序的文档图标文件。文
27、档图:应用程序的文档图标文件。文档图标一般显示在多文档程序界面上。标一般显示在多文档程序界面上。Toolbar.bmp:工具栏按钮的位图文件。:工具栏按钮的位图文件。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 29(3) 项目工作区文件和工程文件项目工作区文件和工程文件Li2_1.dsw:保存当前工作区所包含的工程的信:保存当前工作区所包含的工程的信息。息。 Li2_1.dsp:包含当前工程的设置、工程中的文:包含当前工程的设置、工程中的文件等信息。件等信息。 Visual C+程序设计与应用教程2021/12/1第第2 2章章
28、MFCMFC应用程序概述应用程序概述 30(4) 其他文件其他文件 Li2_1.clw:该文件是类信息文件。它保存了:该文件是类信息文件。它保存了ClassWizard编辑现有类或增加新类时需使用的类信编辑现有类或增加新类时需使用的类信息,同时还保存了创建、编辑消息映射和成员函数所息,同时还保存了创建、编辑消息映射和成员函数所需的信息。需的信息。ReadMe.txt:该文件是工程自述文件。主要介绍所:该文件是工程自述文件。主要介绍所创建文件的内容和功能,以及添加用户代码、更改使创建文件的内容和功能,以及添加用户代码、更改使用语言的方法。用语言的方法。 Visual C+程序设计与应用教程202
29、1/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 312.2.应用程序的执行过程应用程序的执行过程 启动启动: :创建应用程序对象创建应用程序对象theApptheApp、调用应用程序类的构、调用应用程序类的构造函数初始化对象造函数初始化对象theApptheApp。 应用程序框架调用应用程序框架调用MFCMFC提供的提供的AfxWinMainAfxWinMain( )( )主函数。主函数。AfxWinMainAfxWinMain( )( )主函数,首先通过调用全局函数主函数,首先通过调用全局函数AfxGetAppAfxGetApp( )( )来获取来获取theApptheAp
30、p的指针的指针pApppApp;然后通过该指针调用然后通过该指针调用theApptheApp的成员函数的成员函数InitInstanceInitInstance( )( )来初始化应用程序。来初始化应用程序。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 32 在应用程序的初始化过程中,同时还构造了文在应用程序的初始化过程中,同时还构造了文档模板,产生最初的文档、视图和主框架窗口,并档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。生成工具栏和状态栏。当当InitInstanceInitInstance( )( )函数执
31、行完毕后,函数执行完毕后,WinMainWinMain( )( )函数将调用成员函数函数将调用成员函数 Run( )Run( ),进入,进入消息处理循环;消息处理循环;函数函数Run( )Run( )收到收到WM_QUITWM_QUIT消息。消息。MFCMFC首先调用首先调用CWinAppCWinApp类的成员函数类的成员函数ExitInstanceExitInstance( )( );然后调用静态对象的析构函数;然后调用静态对象的析构函数;退出应用程序,将控制权交给操作系统。退出应用程序,将控制权交给操作系统。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC
32、应用程序概述应用程序概述 33消息对话框消息对话框 一种简单的对话框,用户可以直接调用消息对话框函一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。数来使用它,而不需要自己创建。Visual C+Visual C+提供提供3 3个消息个消息对话框函数对话框函数,它们的原型为:,它们的原型为:int AfxMessageBox(LPCTSTR lpText,UINT nType=MB_OK,UINT nIDHelp=0);int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT nType);int C
33、Wnd:MessageBox(LPCTSTR lpText,LPCTSTR lpCaption=NULL,UINT nType= MB_OK);Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 34Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 35Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 362.2.4 文档文档/视图结构视图结构 文档视图体系结构是文档视图体系结构是MFCMFC应用程序框架结构应用程序框架结构
34、的基石,它定义了的基石,它定义了一种程序结构一种程序结构,这种结构利用文,这种结构利用文档对象保存应用程序的数据,依靠视图对象控制视档对象保存应用程序的数据,依靠视图对象控制视图显示数据,文档与视图的关系是一对多的关系,图显示数据,文档与视图的关系是一对多的关系,也就是说,文档中的数据可以以不同的方式显示。也就是说,文档中的数据可以以不同的方式显示。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 37 应用程序对象 文档模板对象 文档对象 视图对象 框架窗口对象 Visual C+程序设计与应用教程2021/12/1第第2 2章章 M
35、FCMFC应用程序概述应用程序概述 382.3 消息映射与消息处理消息映射与消息处理 WindowsWindows消息主要有消息主要有3 3种类型种类型: :标准标准WindowsWindows消息、消息、控件消息和命令消息。控件消息和命令消息。1 1标准标准WindowsWindows消息消息除除WM_COMMANDWM_COMMAND以外,所有以以外,所有以“WM_”WM_”为前缀的消为前缀的消息都是标准息都是标准WindowsWindows消息消息; ;由窗口类或视图类处理由窗口类或视图类处理; ;都有默认的处理函数,它们在都有默认的处理函数,它们在CWndCWnd类中进行了预类中进行了
36、预定义。定义。2.3.1 消息的类别及其描述消息的类别及其描述 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 39标准的标准的WindowsWindows消息又分为消息又分为3 3类:类:键盘消息、鼠标消息和窗口消息。键盘消息、鼠标消息和窗口消息。(1)(1)键盘消息键盘消息 键盘消息与键盘某个键的动作相关联。常见的键键盘消息与键盘某个键的动作相关联。常见的键盘消息有以下几种。盘消息有以下几种。WM_KEYDOWNWM_KEYDOWN、WM_KEYUPWM_KEYUP:按下、释放非系统键产生的:按下、释放非系统键产生的消息。消息。W
37、M_CHARWM_CHAR:输入非系统字符时产生的消息。:输入非系统字符时产生的消息。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 40(2) (2) 鼠标消息鼠标消息 鼠标消息涉及到鼠标的单击、双击、拖动等。常用的鼠标消息涉及到鼠标的单击、双击、拖动等。常用的鼠标消息有以下几种。鼠标消息有以下几种。 WM_MOUSEMOVEWM_MOUSEMOVE:鼠标移动时产生的消息。:鼠标移动时产生的消息。 WM_RBUTTONDOWNWM_RBUTTONDOWN:鼠标右键按下时产生的消息。:鼠标右键按下时产生的消息。 WM_LBUTTOND
38、OWNWM_LBUTTONDOWN:鼠标左键按下时产生的消息。:鼠标左键按下时产生的消息。 WM_LBUTTONDBLCLICKWM_LBUTTONDBLCLICK:鼠标双击时产生的消息。:鼠标双击时产生的消息。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 41(3) (3) 窗口消息窗口消息 窗口消息一般与创建窗口、绘制窗口、移动窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等动作有关。窗口和销毁窗口等动作有关。 在在MFCMFC应用程序中,窗口消息是由视图类、应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。窗口
39、类及它们的派生类处理的。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 422.2.控件消息控件消息 控件消息是指控件或其他子窗口向父窗口发送控件消息是指控件或其他子窗口向父窗口发送的的WM_COMMANDWM_COMMAND消息。消息。 与其他标准的与其他标准的WindowsWindows消息一样,控件消息也应消息一样,控件消息也应该在视图类、窗口类中进行处理。但是,如果用户该在视图类、窗口类中进行处理。但是,如果用户单击按钮控件时,发出的控件通知消息单击按钮控件时,发出的控件通知消息BN_CLICKEDBN_CLICKED将作为命
40、令消息来处理。将作为命令消息来处理。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 433.3.命令消息命令消息 命令消息是由菜单项、工具栏按钮、快捷键等命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的用户界面对象发出的WM_COMMANDWM_COMMAND消息。消息。 命令消息与其他消息不同,它可被更广泛的对命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图象如文档、文档模板、应用程序对象、窗口和视图等处理。等处理。Visual C+程序设计与应用教程2021/12/1第第2 2章章 M
41、FCMFC应用程序概述应用程序概述 442.3.2 MFC消息映射机制消息映射机制 MFC MFC采用消息映射来处理消息;采用消息映射来处理消息; 消息映射机制包括一组消息映射宏,用于把一个消息映射机制包括一组消息映射宏,用于把一个WindowsWindows消息和其消息处理函数联系起来。消息和其消息处理函数联系起来。 所有从所有从CCmdTargetCCmdTarget类派生出来的类都能够拥有自类派生出来的类都能够拥有自己的消息映射。己的消息映射。 与与MFCMFC消息映射机制有关的宏有以下消息映射机制有关的宏有以下3 3个:个:DECLARE_MESSAGE_MAP( )DECLARE_M
42、ESSAGE_MAP( )BEGIN_MESSAGE_MAP(MyClass, MybaseClassBEGIN_MESSAGE_MAP(MyClass, MybaseClass) )END_MESSAGE_MAP( )END_MESSAGE_MAP( )Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 45为了使用消息映射宏:为了使用消息映射宏:u首先在类定义的结尾用首先在类定义的结尾用DECLARE_MESSAGE_MAP( )DECLARE_MESSAGE_MAP( )宏来声明使用消息映射,该宏表示在为各个处理函宏来声明使用消息映
43、射,该宏表示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。是该类的成员函数。u然后在类的实现源文件中用然后在类的实现源文件中用BEGIN_MESSAGE_MAP( )BEGIN_MESSAGE_MAP( )和和END_MESSAGE_MAP( )END_MESSAGE_MAP( )宏来宏来定义消息映射。定义消息映射。MFCMFC应用程序应用程序MESSAG_MAPMESSAG_MAP消息映射的形式如下:消息映射的形式如下:Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程
44、序概述 46BEGIN_MESSAGE_MAP(MyClass, MybaseClass) / AFX_MSG_MAP (MyClass) /ClassWizard维护消息映射宏的标记维护消息映射宏的标记 ON_. /MFC预定义消息映射宏预定义消息映射宏 ON_MESSAGE(message, memberFun)/用户自定义消息映射宏用户自定义消息映射宏 / AFX_MSG_MAPEND_MESSAGE_MAP()其中,其中,MyClass是拥有消息映射的派生类名,是拥有消息映射的派生类名,MybaseClass 是其基类名。是其基类名。Visual C+程序设计与应用教程2021/12/
45、1第第2 2章章 MFCMFC应用程序概述应用程序概述 47【例【例2.22.2】利用】利用ClassWizardClassWizard为例为例2.12.1中生成的应用程序中生成的应用程序Li2_1Li2_1添加鼠标右键按下消息,即添加鼠标右键按下消息,即WM_RBUTTONDOWNWM_RBUTTONDOWN消息,并消息,并为为FileFile菜单下的菜单下的OpenOpen菜单项添加消息处理函数。在两个消息菜单项添加消息处理函数。在两个消息处理函数中分别添加输出信息,分析处理函数中分别添加输出信息,分析ClassWizardClassWizard类向导所类向导所进行的消息映射。进行的消息映
46、射。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 48(1)启动启动Visual C+ IDE,单击,单击File菜单下的菜单下的Open Workspace菜单项,菜单项,打开项目打开项目Li2_1。(2)单击单击View菜单下的菜单下的ClassWizard菜单项菜单项(或按或按Ctrl+W快捷快捷键键),打开打开MFC ClassWizard对话框对话框。(3)单击单击Message Maps选项卡,在选项卡,在Project、Class name、Object Ids的下拉菜单中分别的下拉菜单中分别选择选择Li2_1、CLi
47、2_1View和和CLi2_1View。(4)添加鼠标右键按下消息。在添加鼠标右键按下消息。在Messages下拉菜单中选择下拉菜单中选择WM_RBUTTONDOWN。单击对话框右边的。单击对话框右边的Add Function按钮,为该消息添加处理函数。从对话框的按钮,为该消息添加处理函数。从对话框的Member Functions下拉列表框中可以看到,系统为处理函数取名为下拉列表框中可以看到,系统为处理函数取名为OnRButtonDown。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 49Visual C+程序设计与应用教程202
48、1/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 50 单击对话框右边的单击对话框右边的Edit CodeEdit Code按钮,为该消息处理函数添按钮,为该消息处理函数添加输出提示信息的代码。加输出提示信息的代码。void CLi2_1View:OnRButtonDown(UINT nFlags, CPointvoid CLi2_1View:OnRButtonDown(UINT nFlags, CPoint point) point) / TODO: Add your message handler code here and/or call default/ TODO: A
49、dd your message handler code here and/or call default MessageBox MessageBox(鼠标右键被按下!鼠标右键被按下!,消息框消息框, , MB_ICONEXCLAMATION|MB_OKCANCEL);MB_ICONEXCLAMATION|MB_OKCANCEL);CView:OnRButtonDown(nFlagsCView:OnRButtonDown(nFlags, point);, point); Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 51(5)(5)
50、在在Object IdsObject Ids下拉菜单中下拉菜单中选择选择ID_FILE_OPENID_FILE_OPEN,在,在MessagesMessages下拉菜单中下拉菜单中选择选择COMMANDCOMMAND。单击对话框右边。单击对话框右边的的Add FunctionAdd Function按钮,弹出按钮,弹出Add Member FunctionAdd Member Function对对话框,为消息处理函数命名。单击话框,为消息处理函数命名。单击OKOK按钮接受系统默按钮接受系统默认函数名。认函数名。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应
51、用程序概述应用程序概述 52Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 53为为OnFileOpen()添加输出提示信息的代码添加输出提示信息的代码。void CLi2_1View:OnFileOpen() void CLi2_1View:OnFileOpen() / TODO: Add your command handler code here/ TODO: Add your command handler code here MessageBox( MessageBox(【File|OpenFile|Open】菜单项被单击】
52、菜单项被单击!, 消息框消息框,MB_ICONEXCLAMATION|MB_OKCANCEL);,MB_ICONEXCLAMATION|MB_OKCANCEL); Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 54(6) (6) 单击项目工作区的单击项目工作区的FileViewFileView选项卡,展开选项卡,展开Source Source FilesFiles文件夹,双击打开文件夹,双击打开Li2_1View.cppLi2_1View.cpp文件。该文件的文件。该文件的消息映射表如下:消息映射表如下:Visual C+程序设计与
53、应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 55BEGIN_MESSAGE_MAP(CLi2_1View, CView)/AFX_MSG_MAP(CLi2_1View)ON_WM_CHAR()ON_WM_KEYDOWN()ON_WM_RBUTTONDOWN()ON_COMMAND(ID_FILE_OPEN, OnFileOpen)/AFX_MSG_MAP/Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,
54、CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()开始开始结束结束灰色显示,灰色显示,映射宏由映射宏由ClassWizard维护维护 MFC预定义窗口预定义窗口消息映射宏,不消息映射宏,不带参数带参数 命令消息命令消息映射宏,映射宏,带有两个带有两个参数参数第一个参数表示命令消息的第一个参数表示命令消息的ID号,第二个号,第二个参数是消息处理函数的函数名参数是消息处理函数的函数名 Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCM
55、FC应用程序概述应用程序概述 56(7) (7) 打开头文件打开头文件Li2_1View.hLi2_1View.h。可以看到,在文件的末尾。可以看到,在文件的末尾ClassWizardClassWizard为我们添加的消息映射函数进行了声明,使为我们添加的消息映射函数进行了声明,使用的是用的是DECLARE_MESSAGE_ MAP( )DECLARE_MESSAGE_ MAP( )宏。宏。/AFX_MSG(CLi2_1View)afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);afx_msg void OnKeyDown(U
56、INT nChar, UINT nRepCnt, UINT nFlags);afx_msg void OnRButtonDown(UINT nFlags, CPoint point);afx_msg void OnFileOpen();/AFX_MSGDECLARE_MESSAGE_MAP()Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 572.3.3 自定义消息处理自定义消息处理 自定义消息处理自定义消息处理:定义消息名、分配定义消息名、分配IDID值及完成消息值及完成消息映射。映射。WindowsWindows将所有的消息值分为
57、将所有的消息值分为4 4段:段:0 x00000 x00000 x03FF0 x03FF段段: :用于用于WindowsWindows系统消息系统消息0 x04000 x04000 x7FFF0 x7FFF段段: :用于用户自定义的窗口消息用于用户自定义的窗口消息0 x80000 x80000 xBFFF0 xBFFF段段: :为为WindowsWindows保留值保留值0 xC0000 xC0000 xFFFF0 xFFFF段段: :用于应用程序的字符串消息。用于应用程序的字符串消息。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述
58、58 常量常量WM_USER(WM_USER(为为0 x0400)0 x0400)与第一个自定义消息值相对应,与第一个自定义消息值相对应,用户必须为自己的消息定义相对于用户必须为自己的消息定义相对于WM_USERWM_USER的偏移值,利用的偏移值,利用#define#define语句直接定义自己的消息,如下所示:语句直接定义自己的消息,如下所示: #define WM_USER WM_USER+3 ;/ 自定义消息自定义消息WM_USER 也可以调用窗口消息注册函数也可以调用窗口消息注册函数RegisterWindowMessageRegisterWindowMessage( )( )来来定
59、义一个定义一个WindowsWindows消息,由系统分配消息一个整数值。该函消息,由系统分配消息一个整数值。该函数原型为:数原型为: UINT RegisterWindowMessage(LPCTSTR lpString); 其中参数其中参数lpStringlpString是要定义的消息名,调用成功后将返是要定义的消息名,调用成功后将返回该消息的回该消息的IDID值。值。Visual C+程序设计与应用教程2021/12/1第第2 2章章 MFCMFC应用程序概述应用程序概述 59【例【例2.32.3】 编写一个自定义消息应用程序,并添加编写一个自定义消息应用程序,并添加WM_RBUTTON
60、DOWNWM_RBUTTONDOWN消息。当程序运行时,用户在视图窗口中消息。当程序运行时,用户在视图窗口中单击鼠标右键,则调用自定义消息处理函数,输出文本单击鼠标右键,则调用自定义消息处理函数,输出文本“自定义消息自定义消息WM_MYMESSAGEWM_MYMESSAGE的处理函数被调用!的处理函数被调用!”。(1)(1)利用利用AppWizardexeAppWizardexe向导创建单文档应用程序向导创建单文档应用程序Li2_3Li2_3。(2) (2) 为该应用程序添加为该应用程序添加WM_RBUTTONDOWNWM_RBUTTONDOWN消息映射。消息映射。(3)(3)打开头文件打开头
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 众合教育法考客观题一本通考试复习题库(附答案)
- 用户界面设计师(某大型国企)面试题题库详解
- 体育人教版水平三五六年级全一册:纸杯的运动秘密 教学设计
- 唐山市丰南区事业单位2024年选聘高层次工作人员笔试考点考试题库含答案
- 庆典策划团队合作协议
- 班组长培训项目实施与管理合同
- 社交媒体数据监测协议
- 工业互联网2026年智能运维服务合同协议
- 电商平台商品举报及维权处理协议2026
- 地缘政治风险涉及国际运输合同协议
- 成都树德东马棚小升初入学分班考试数学考试试题及答案
- 2025-2026学年渎粤语教学设计和教案
- 2025年鸡西市虎林市社区工作者公开招聘笔试真题(含完整答案解析)
- 2025年廊坊银行校园招聘笔试考试试题及答案详解
- 山东省公安机关危险化学品信息管理系统企业端操作说明书
- 小学数学教学中几何图形认知与虚拟现实技术结合的课题报告教学研究课题报告
- 2026数字人民币运营管理中心有限公司招聘笔试历年参考题库附带答案详解
- 云南保山城市旅游风土人文文化推介图文课件
- 新教材人教版高中地理选择性必修1全册各章节知识点考点重点难点归纳总结
- DB13-T 5553-2022 生态清洁小流域治理技术规范
- 初中道法课说课稿(模板)
评论
0/150
提交评论