第6讲 MFC应用程序概述

上传人:gui****hi 文档编号:206581799 上传时间:2023-05-04 格式:PPT 页数:44 大小:799KB
收藏 版权申诉 举报 下载
第6讲 MFC应用程序概述_第1页
第1页 / 共44页
第6讲 MFC应用程序概述_第2页
第2页 / 共44页
第6讲 MFC应用程序概述_第3页
第3页 / 共44页
资源描述:

《第6讲 MFC应用程序概述》由会员分享,可在线阅读,更多相关《第6讲 MFC应用程序概述(44页珍藏版)》请在装配图网上搜索。

1、第第 6 6 讲讲 MFCMFC应用程序概述应用程序概述 1 1、WindowsWindows应用程序概述应用程序概述 2 2、MFCMFC应用程序框架应用程序框架 3 3、消息映射与消息处理、消息映射与消息处理 4 4、程序调试、程序调试 5 5、应用实例、应用实例2 26.1 Windows6.1 Windows应用程序概述应用程序概述 WindowsWindows应应用用程程序序运运行行于于WindowsWindows操操作作系系统统上上,与与DOSDOS应用程序有着本质的区别。应用程序有着本质的区别。所所有有的的WindowsWindows应应用用程程序序都都是是由由消消息息驱驱动动的

2、的,消消息息处理是所有处理是所有WindowsWindows应用程序的核心。应用程序的核心。31 1、消息和事件、消息和事件 WindowsWindows是是一一个个基基于于事事件件的的消消息息驱驱动动系系统统,WindowsWindows应用程序是按照应用程序是按照“事件事件消息消息处理处理”非顺序的机制运行的。非顺序的机制运行的。消消息息的的处处理理:其其实实质质就就是是事事件件的的处处理理。当当有有某某个个事事件件(如如单单击击鼠鼠标标、键键盘盘输输入入和和执执行行菜菜单单命命令令等等)发发生生时时,WindowsWindows会会根根据据具具体体的的事事件件产产生生对对应应的的消消息息

3、,并并发发送送到到指指定定应应用用程程序序的的消消息息队队列列。应应用用程程序序从从消消息息队队列列中中取取出消息,并根据不同的消息进行不同的处理。出消息,并根据不同的消息进行不同的处理。消消息息:用用于于描描述述某某个个事事件件发发生生的的信信息息,而而事事件件是是对对WindowsWindows的的某某种种操操作作。事件是因,消息是果,事件产生消息,消息对应事件。事件是因,消息是果,事件产生消息,消息对应事件。4 452 2、句柄、句柄 句句柄柄是是WindowsWindows编编程程的的基基础础,句句柄柄本本质质是是WindowsWindows使使用的一种无重复整数。用的一种无重复整数。

4、句句柄柄主主要要用用来来标标识识应应用用程程序序中中的的一一个个对对象象,如如窗窗口、实例、菜单、内存、输出设备、控制或文件等。口、实例、菜单、内存、输出设备、控制或文件等。6由于对应的由于对应的MFCMFC类已类已对句柄进行了封装,对句柄进行了封装,大多数情况下不再大多数情况下不再需要访问句柄。需要访问句柄。76.2 MFC6.2 MFC应用程序框架应用程序框架利用利用MFC MFC AppWizardexeAppWizardexe 创建应用程序框架。创建应用程序框架。一、一、创建创建MFCMFC应用程序框架应用程序框架 MFC MFC:Microsoft Foundation Class,

5、Microsoft Foundation Class,一套专门用于一套专门用于WindowsWindows编程的基础类库,它的类可以处理许多标准的编程的基础类库,它的类可以处理许多标准的WindowsWindows编程编程任务。任务。实例实例1 1:编写一个单文档的应用程序,程序运行时,通过消编写一个单文档的应用程序,程序运行时,通过消息框输出息框输出“这是一个单文档应用程序!这是一个单文档应用程序!”。8MFCMFC应用程序框架结构类的继承关系:应用程序框架结构类的继承关系:二、二、MFC MFC应用程序框架结构类应用程序框架结构类91.CObject1.CObject类类 CObjectC

6、Object是是MFCMFC类类库库的的根根类类,它它几几乎乎描描述述了了所所有有MFCMFC类类的的一一些些公公共共特特性性,并并且且给给所所有有由由它它派派生生出出的的类类提提供供了了3 3种种重重要要特特性性,即即:串串行行化化支支持、运行时类信息支持以及诊断和调试支持。持、运行时类信息支持以及诊断和调试支持。2.CCmdTarget2.CCmdTarget类类 命命令令类类CCmdTargetCCmdTarget是是CObjectCObject的的子子类类,是是MFCMFC库库中中所所有有具具有有消消息息映映射射属属性性的的类类的的公公共共基基类类。从从CCmdTargetCCmdTa

7、rget派派生生的的类类能能在在程程序序运运行行时时动动态态创创建对象和处理命令消息。建对象和处理命令消息。103.CWinApp3.CWinApp类类 应应用用程程序序类类CWinAppCWinApp是是CWinThreadCWinThread的的子子类类,封封装装了了初初始始化化、运运行行、终止应用程序的代码。可以由此派生自己的应用类。终止应用程序的代码。可以由此派生自己的应用类。4.CWnd4.CWnd类类 窗窗口口类类CWndCWnd提提供供了了MFCMFC中中所所有有窗窗口口类类的的基基本本功功能能。从从CWndCWnd派派生的类可以拥有自己的窗口,并对它进行控制。生的类可以拥有自己

8、的窗口,并对它进行控制。11115.CFrameWnd5.CFrameWnd类类 CFrameWndCFrameWnd类类是是CWndCWnd类类的的派派生生类类。它它是是所所有有其其他他框框架架窗窗口类口类的基类,主要用来管理一个窗口。的基类,主要用来管理一个窗口。CFrameWndCFrameWnd类的对象是一个框架窗口,包括边框、标题栏、菜类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。单、最大化按钮、最小化按钮和一个激活的视图。CFrameWndCFrameWnd类支持单类支持单文档界面,对于多文档界面,使用它的两个派生类文档界面,对于多文档界面

9、,使用它的两个派生类CMDIFrameWndCMDIFrameWnd和和CMDIChildWndCMDIChildWnd。CMDIFrameWndCMDIFrameWnd类用于类用于MDIMDI的主窗口,的主窗口,CMDIChildWndCMDIChildWnd类用类用于于MDIMDI的子窗口。的子窗口。126.CView6.CView类类 视视图图类类CViewCView是是CWndCWnd类类的的子子类类。视视图图类类及及其其派派生生类类用用于于管管理理框框架窗口的客户区。架窗口的客户区。7.CDocument7.CDocument类类 文文档档类类CDocumentCDocument负负

10、责责装装载载和和维维护护文文档档。文文档档包包括括应应用用程程序序的的工工作成果或环境设置数据等,可以是程序需要保存的任何内容。作成果或环境设置数据等,可以是程序需要保存的任何内容。13 一一个个MFCMFC应应用用程程序序并并不不直直接接操操作作以以上上的的类类,而而是是以以上类为上类为基类派生的新类基类派生的新类,构建,构建WindowsWindows应用程序基本框架。应用程序基本框架。如应用程序的类与这些基类的派生关系如应用程序的类与这些基类的派生关系:14(1)(1)头文件与实现文件头文件与实现文件 MainFrm.hMainFrm.h和和MainFrm.cppMainFrm.cpp:

11、定义和实现窗口框架类:定义和实现窗口框架类CMainFrameCMainFrame。TestDoc.hTestDoc.h和和TestDoc.cppTestDoc.cpp:定义和实现文档类:定义和实现文档类CTestDocCTestDoc。TestView.hTestView.h 和和TestView.cppTestView.cpp:定义和实现视图类:定义和实现视图类CTestViewCTestView。Test.hTest.h 和和Test.cppTest.cpp:定义和实现应用程序类:定义和实现应用程序类CTestAppCTestApp。Resource.hResource.h:定义工程中所

12、有资源标识符,给资源:定义工程中所有资源标识符,给资源IDID分配一个整数值。分配一个整数值。StdAfx.hStdAfx.h和和StdAfx.cppStdAfx.cpp:用用于于建建立立一一个个预预编编译译的的头头文文件件Test.PCHTest.PCH和和一一个预定义的类型文件个预定义的类型文件StdAfx.objStdAfx.obj。1.1.应用程序向导生成的文件应用程序向导生成的文件 三、三、MFCMFC应用程序分析应用程序分析15(2)(2)资源文件资源文件Test.rcTest.rc和和Test.rc2Test.rc2:Test.rcTest.rc文文件件是是程程序序所所使使用用的

13、的所所有有WindowsWindows资源的列表。资源的列表。Test.icoTest.ico:应用程序的图标所使用的图标文件。:应用程序的图标所使用的图标文件。TestDoc.icoTestDoc.ico:应应用用程程序序的的文文档档图图标标文文件件。文文档档图图标标一般显示在多文档程序界面上。一般显示在多文档程序界面上。Toolbar.bmpToolbar.bmp:工具栏按钮的位图文件。:工具栏按钮的位图文件。16(3)(3)项目工作区文件和工程文件项目工作区文件和工程文件Test.dswTest.dsw:保存当前工作区所包含的工程的信息。:保存当前工作区所包含的工程的信息。Test.ds

14、pTest.dsp:包包含含当当前前工工程程的的设设置置、工工程程中中的的文文件件等等信信息。息。17(4)(4)其他文件其他文件 TestTest.clw.clw:该该文文件件是是类类信信息息文文件件。它它保保存存了了ClassWizardClassWizard编编辑辑现现有有类类或或增增加加新新类类时时需需使使用用的的类类信信息息,同同时时还还保保存存了了创创建建、编编辑辑消消息息映映射射和和成成员员函数所需的信息。函数所需的信息。ReadMe.txtReadMe.txt:该该文文件件是是工工程程自自述述文文件件。主主要要介介绍绍所所创创建建文文件件的的内内容容和和功能,以及添加用户代码、

15、更改使用语言的方法。功能,以及添加用户代码、更改使用语言的方法。182.2.应用程序的执行过程应用程序的执行过程 然后通过该指针调用然后通过该指针调用theApptheApp的成员函数的成员函数InitInstanceInitInstance()()来初始化应用程来初始化应用程序。序。启动启动:创建应用程序对象创建应用程序对象theApptheApp、调用应用程序类的构造函数初、调用应用程序类的构造函数初始化对象始化对象theApptheApp。应用程序框架调用应用程序框架调用MFCMFC提供的提供的AfxWinMainAfxWinMain()()主函数。主函数。AfxWinMainAfxWi

16、nMain()()主函数,首先通过调用全局函数主函数,首先通过调用全局函数AfxGetAppAfxGetApp()()来获取来获取theApptheApp的指针的指针pApppApp;19 在应用程序的初始化过程中,同时还构造文档模板,产生在应用程序的初始化过程中,同时还构造文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。最初的文档、视图和主框架窗口,并生成工具栏和状态栏。当当InitInstanceInitInstance()()函数执行完毕后,函数执行完毕后,WinMainWinMain()()函数将调用成员函函数将调用成员函数数Run()Run(),进入消息处理循环;,

17、进入消息处理循环;函数函数Run()Run()收到收到WM_QUITWM_QUIT消息。消息。MFCMFC首先调用首先调用CWinAppCWinApp类的成员函数类的成员函数ExitInstanceExitInstance()();然后调用静态对象的析构函数;然后调用静态对象的析构函数;退出应用程序,将控制权交给操作系统。退出应用程序,将控制权交给操作系统。20消息对话框消息对话框 一种简单的对话框,用户可以直接调用消息对话框一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。函数来使用它,而不需要自己创建。Visual C+Visual C+提供提供三个消三个消息对话

18、框函数息对话框函数,它们的原型为:,它们的原型为:intint AfxMessageBox(LPCTSTRAfxMessageBox(LPCTSTR lpText,UINTlpText,UINT nTypenType=MB_OK,UINT=MB_OK,UINT nIDHelpnIDHelp=0);=0);intint MessageBox(HWNDMessageBox(HWND hWnd,LPCTSTRhWnd,LPCTSTR lpText,LPCTSTRlpText,LPCTSTR lpCaption,UINTlpCaption,UINT nTypenType););intint CWnd:

19、MessageBox(LPCTSTRCWnd:MessageBox(LPCTSTR lpText,LPCTSTRlpText,LPCTSTR lpCaptionlpCaption=NULL,UINT=NULL,UINT nTypenType=MB_OK);=MB_OK);2122四、四、文档文档/视图结构视图结构 文档视图体系结构是文档视图体系结构是MFCMFC应用程序框架结构的基石,应用程序框架结构的基石,定义了定义了一种程序结构一种程序结构,利用文档对象保存应用程序的数据,依,利用文档对象保存应用程序的数据,依靠视图对象控制视图显示数据,文档与视图的关系是一对多的靠视图对象控制视图显示数据

20、,文档与视图的关系是一对多的关系,即文档中的数据可以以不同的方式显示。关系,即文档中的数据可以以不同的方式显示。23246.3 6.3 消息映射与消息处理消息映射与消息处理 消息映射是将消息处理函数与它要处理的特定消消息映射是将消息处理函数与它要处理的特定消息连接起来的一种机制。息连接起来的一种机制。【例例6.26.2】利利用用ClassWizardClassWizard为为例例中中生生成成的的应应用用程程序序添添加加鼠鼠标标右右键键按按下下消消息息,即即WM_RBUTTONDOWNWM_RBUTTONDOWN消消息息,并并为为FileFile菜菜单单下下的的OpenOpen菜菜单单项项添添加

21、加消息处理函数,分析消息处理函数,分析ClassWizardClassWizard类向导所进行的消息映射。类向导所进行的消息映射。25应用程序应用程序的执行过程的执行过程 然后通过该指针调用然后通过该指针调用theApptheApp的成员函数的成员函数InitInstanceInitInstance()()来初始来初始化应用程序。化应用程序。启动启动:创建应用程序对象创建应用程序对象theApptheApp、调用应用程序类的构造函数、调用应用程序类的构造函数初始化对象初始化对象theApptheApp。应用程序框架调用应用程序框架调用MFCMFC提供的提供的AfxWinMainAfxWinMa

22、in()()主函数。主函数。AfxWinMainAfxWinMain()()主函数,首先通过调用全局函数主函数,首先通过调用全局函数AfxGetAppAfxGetApp()()来获取来获取theApptheApp的指针的指针pApppApp;26 在应用程序的初始化过程中,同时还构造文档模板,产生最在应用程序的初始化过程中,同时还构造文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。初的文档、视图和主框架窗口,并生成工具栏和状态栏。当当InitInstanceInitInstance()()函数执行完毕后,函数执行完毕后,AfxWinMainAfxWinMain()()函数将调

23、用成函数将调用成员函数员函数Run()Run(),进入消息处理循环;当没有窗口消息需要处理时,进入消息处理循环;当没有窗口消息需要处理时,OnIdleOnIdle函数被窗口框架调用。函数被窗口框架调用。函数函数Run()Run()收到收到WM_QUITWM_QUIT消息。消息。MFCMFC首先调用首先调用CWinAppCWinApp类的成员函数类的成员函数ExitInstanceExitInstance()();然后调用静态对象的析构函数;然后调用静态对象的析构函数;退出应用程序,将控制权交给操作系统。退出应用程序,将控制权交给操作系统。276.3 6.3 消息映射与消息处理消息映射与消息处理

24、 消息映射是将消息处理函数与它要处理的特定消息连消息映射是将消息处理函数与它要处理的特定消息连接起来的一种机制。接起来的一种机制。根根据据消消息息来来源源可可把把消消息息分分为为系系统统定定义义的的消消息息和和应应用用程程序序定定义义消消息息。一、一、消息的类别及其描述消息的类别及其描述 系统定义的消息都有一个唯一的标识,即一个符号常量。系统定义的消息都有一个唯一的标识,即一个符号常量。BM_ BM_ 表示按钮控制消息;表示按钮控制消息;CB_ CB_ 表示组合框控表示组合框控制消息制消息DM_ DM_ 表示默认下压式按钮控制消息;表示默认下压式按钮控制消息;EM_ EM_ 表示编辑控制消息表

25、示编辑控制消息LB_ LB_ 表示列表框控制消息;表示列表框控制消息;SBM_ SBM_ 表示滚动条表示滚动条控制消息控制消息WM_ WM_ 表示窗口消息表示窗口消息 标识符号常量范围是:标识符号常量范围是:0WM_USER-1 0WM_USER-1 (0 x800000 xBFFFF0 x800000 xBFFFF)。)。286.3 6.3 消息映射与消息处理消息映射与消息处理 一、一、消息的类别及其描述消息的类别及其描述 根据消息来源可把消息分为根据消息来源可把消息分为系统定义的消息系统定义的消息和和应用程应用程序定义消息序定义消息。应用程序消息是应用程序创建的,用于自己窗口或其他应用程序

26、交互应用程序消息是应用程序创建的,用于自己窗口或其他应用程序交互的消息。标识符号常量范围是:的消息。标识符号常量范围是:WM_USERWM_USER(0 x04000 x0400)0 x7FFF0 x7FFF或或0 xC0000 x7FFF F0 xC0000 x7FFF F。WM_USERWM_USER(0 x04000 x0400)0 x7FFF 0 x7FFF 范围的消息由应用程序自范围的消息由应用程序自己使用,己使用,0 xC0000 x7FFF F 0 xC0000 x7FFF F 范围消息用来和其他应用程序通信。范围消息用来和其他应用程序通信。296.3 6.3 消息映射与消息处理

27、消息映射与消息处理 一、一、消息的类别及其描述消息的类别及其描述 根据消息发送的目的地来看,消息可分为根据消息发送的目的地来看,消息可分为队列消息和队列消息和非队列消息非队列消息。Windows Windows系统维护一个系统消息队列,每个系统维护一个系统消息队列,每个GUIGUI线程有一个线线程有一个线程消息队列。所有队列消息都被发送到系统消息队列,程消息队列。所有队列消息都被发送到系统消息队列,鼠标消息、键盘鼠标消息、键盘消息和消息和WM_PAINTWM_PAINT、WM_TIMEWM_TIME和和WM_QUITWM_QUIT是是队列消息队列消息,其他绝大多数消息都,其他绝大多数消息都是是

28、非队列消息非队列消息。306.3 6.3 消息映射与消息处理消息映射与消息处理 从从MFCMFC编编程程应应用用来来说说WindowsWindows消消息息主主要要有有3 3种种类类型型:标标准准WindowsWindows消息、控件消息和命令消息。消息、控件消息和命令消息。一、一、消息的类别及其描述消息的类别及其描述 1 1标准标准WindowsWindows消息消息除除WM_COMMANDWM_COMMAND以外,所有以以外,所有以“WM_WM_”为前缀的消息都是标准为前缀的消息都是标准WindowsWindows消息消息;由窗口类或视图类处理由窗口类或视图类处理;都有都有默认的处理函数默

29、认的处理函数,它们在,它们在CWndCWnd类中进行了预定义类中进行了预定义。31标准的标准的WindowsWindows消息又分为消息又分为3 3类:类:键盘消息、鼠标消息和窗口消息。键盘消息、鼠标消息和窗口消息。(1)(1)键盘消息键盘消息 键键盘盘消消息息与与键键盘盘某某个个键键的的动动作作相相关关联联。常常见见的的键键盘盘消消息有以下几种。息有以下几种。WM_KEYDOWNWM_KEYDOWN、WM_KEYUPWM_KEYUP:按下、释放非系统键产生的消息。:按下、释放非系统键产生的消息。WM_CHARWM_CHAR:输入非系统字符时产生的消息。:输入非系统字符时产生的消息。32(2)

30、(2)鼠标消息鼠标消息 鼠标消息涉及到鼠标的单击、双击、拖动等。鼠标消息涉及到鼠标的单击、双击、拖动等。WM_MOUSEMOVEWM_MOUSEMOVE:鼠标移动时产生的消息。:鼠标移动时产生的消息。WM_RBUTTONDOWNWM_RBUTTONDOWN:鼠标右键按下时产生的消息。:鼠标右键按下时产生的消息。WM_LBUTTONDOWNWM_LBUTTONDOWN:鼠标左键按下时产生的消息。:鼠标左键按下时产生的消息。WM_LBUTTONDBLCLICKWM_LBUTTONDBLCLICK:鼠标双击时产生的消息。:鼠标双击时产生的消息。33(3)(3)窗口消息窗口消息 窗窗口口消消息息一一般

31、般与与创创建建窗窗口口、绘绘制制窗窗口口、移移动动窗窗口口和和销销毁窗口等动作有关。毁窗口等动作有关。在在MFCMFC应应用用程程序序中中,窗窗口口消消息息是是由由视视图图类类、窗窗口口类类及及它它们的派生类处理的。们的派生类处理的。342.2.控件消息控件消息 控控件件消消息息是是指指控控件件或或其其他他子子窗窗口口向向父父窗窗口口发发送送的的WM_COMMANDWM_COMMAND消息。消息。与其他标准的与其他标准的WindowsWindows消息一样,控件消息也应该在消息一样,控件消息也应该在视图类、窗口类中进行处理。但是,如果用户单击按钮控件视图类、窗口类中进行处理。但是,如果用户单击

32、按钮控件时,发出的控件通知消息时,发出的控件通知消息BN_CLICKEDBN_CLICKED将作为命令消息来处理。将作为命令消息来处理。353.3.命令消息命令消息 命命令令消消息息是是由由菜菜单单项项、工工具具栏栏按按钮钮、快快捷捷键键等等用用户户界面对象发出的界面对象发出的WM_COMMANDWM_COMMAND消息。消息。命令消息与其他消息不同,它可被更广泛的对象命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。如文档、文档模板、应用程序对象、窗口和视图等处理。36二、二、消息的发送与接收消息的发送与接收WindowsWindows系统中消息发送

33、包括三种方式:系统中消息发送包括三种方式:发送、投递和广播发送、投递和广播。发送方式发送方式使用函数使用函数发送发送SendMessageSendMessageSendNotifyMessageSendNotifyMessageSendMessageTimeoutSendMessageTimeout SendMessageCallbackSendMessageCallback投递投递PostMessagePostMessagePostQuitMessagePostQuitMessage PostThreadMessagePostThreadMessage广播广播BroadcastSystemM

34、essageBroadcastSystemMessage消息的接收主要有消息的接收主要有3 3个函数:个函数:GetMessageGetMessage、PeekMessagePeekMessage和和WaitMessageWaitMessage。37 传统的传统的SDKSDK程序消息处理:程序消息处理:主函数主函数WinMainWinMain使用函数使用函数CreateWindowCreateWindow将窗口和窗口类的窗口过程处理函数类绑定在一起。通过将窗口和窗口类的窗口过程处理函数类绑定在一起。通过消息循环和相应函数,窗口的所有消息都发送到窗口类的窗口过程函数消息循环和相应函数,窗口的所有

35、消息都发送到窗口类的窗口过程函数WndProWndPro,在根据消息的内容匹配相应的,在根据消息的内容匹配相应的CaseCase子句实现响应。子句实现响应。每个类对于它可能接收到的每个消息就必须有一个虚拟函数来每个类对于它可能接收到的每个消息就必须有一个虚拟函数来实现处理。无论是消息数量,还是实现处理。无论是消息数量,还是MFCMFC中都不允许此种消息处理机制。中都不允许此种消息处理机制。消息映射消息映射就是让用户可以指定某个具有消息处理能力的类来处就是让用户可以指定某个具有消息处理能力的类来处理某个消息。就是将一个个消息与其处理函数相互关联,构成一张巨大理某个消息。就是将一个个消息与其处理函

36、数相互关联,构成一张巨大的消息及其处理函数的一一对应表,用户只需在处理函数中添加自己的的消息及其处理函数的一一对应表,用户只需在处理函数中添加自己的代码便可实现特定的动作。代码便可实现特定的动作。38三、三、MFC MFC消息映射机制消息映射机制 MFC MFC采用消息映射来处理消息;采用消息映射来处理消息;消消息息映映射射机机制制包包括括一一组组消消息息映映射射宏宏,把把一一个个WindowsWindows消消息息和和其其消消息处理函数联系起来。息处理函数联系起来。所有从所有从CCmdTargetCCmdTarget类派生出来的类都能够拥有自己的消息映射。类派生出来的类都能够拥有自己的消息映

37、射。与与MFCMFC消息映射机制有关的宏有以下消息映射机制有关的宏有以下3 3个:个:DECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP(MyClassBEGIN_MESSAGE_MAP(MyClass,MybaseClassMybaseClass)END_MESSAGE_MAP()END_MESSAGE_MAP()39为了使用消息映射宏:为了使用消息映射宏:u首首先先在在类类定定义义的的结结尾尾用用DECLARE_MESSAGE_MAP(DECLARE_MESSAGE_MAP()宏宏来来声声明明使使用用消消息息映映射射,该该

38、宏宏表表示示在在为为各各个个处处理理函函数数所所写写的的类类声声明明之之后后存存在消息映射条目,这些函数是该类的成员函数。在消息映射条目,这些函数是该类的成员函数。u然然 后后 在在 类类 的的 实实 现现 源源 文文 件件 中中 用用 BEGIN_MESSAGE_MAP(BEGIN_MESSAGE_MAP()和和 END_MESSAGE_MAPEND_MESSAGE_MAP()()宏来定义消息映射。宏来定义消息映射。40BEGIN_MESSAGE_MAP(MyClassBEGIN_MESSAGE_MAP(MyClass,MybaseClassMybaseClass)/AFX_MSG_MAP(

39、/AFX_MSG_MAP(MyClassMyClass)/)/ClassWizardClassWizard维护消息映射宏的标记维护消息映射宏的标记 ON_.ON_./MFC /MFC预定义消息映预定义消息映射宏射宏 ON_MESSAGE(messageON_MESSAGE(message,memberFunmemberFun)/)/用户自定义消息映射宏用户自定义消息映射宏 /AFX_MSG_MAP/AFX_MSG_MAPEND_MESSAGE_MAP()END_MESSAGE_MAP()其中,其中,MyClassMyClass是拥有消息映射的派生类名,是拥有消息映射的派生类名,MybaseCl

40、assMybaseClass 是其基类名。是其基类名。MFCMFC应用程序应用程序MESSAG_MAPMESSAG_MAP消息映射的形式如下:消息映射的形式如下:41四、四、自定义消息处理自定义消息处理 自定义消息处理自定义消息处理:定义消息名、分配定义消息名、分配IDID值及完成消息映射。值及完成消息映射。WindowsWindows将所有的消息值分为将所有的消息值分为4 4段:段:0 x00000 x00000 x03FF0 x03FF段段:用于用于WindowsWindows系统消息系统消息0 x04000 x04000 x7FFF0 x7FFF段段:用于用户自定义的窗口消息用于用户自定

41、义的窗口消息0 x80000 x80000 xBFFF0 xBFFF段段:为为WindowsWindows保留值保留值0 xC0000 xC0000 xFFFF0 xFFFF段段:用于应用程序的字符串消息。用于应用程序的字符串消息。4242 常常量量WM_USER(WM_USER(为为0 x0400)0 x0400)与与第第一一个个自自定定义义消消息息值值相相对对应应,用用户户必必须须为为自自己己的的消消息息定定义义相相对对于于WM_USERWM_USER的的偏偏移移值值,利利用用#define#define语句直接定义自己的消息,如下所示:语句直接定义自己的消息,如下所示:#define W

42、M_USER WM_USER+3;#define WM_USER WM_USER+3;/自定义消息自定义消息WM_USER WM_USER 也也可可以以调调用用窗窗口口消消息息注注册册函函数数RegisterWindowMessageRegisterWindowMessage()来来定定义义一一个个WindowsWindows消消息息,由由系系统统分分配配消消息息一一个个整整数数值值。该该函函数数原原型型为:为:UINT UINT RegisterWindowMessage(LPCTSTRRegisterWindowMessage(LPCTSTR lpStringlpString);其其中中参

43、参数数lpStringlpString是是要要定定义义的的消消息息名名,调调用用成成功功后后将将返返回回该该消息的消息的IDID值。值。43【例例6.46.4】编写一个自定义消息应用程序,并添加编写一个自定义消息应用程序,并添加WM_RBUTTONDOWNWM_RBUTTONDOWN消息。当程序运行时,用户在视图窗口中单消息。当程序运行时,用户在视图窗口中单击鼠标右键,则调用自定义消息处理函数,输出文本击鼠标右键,则调用自定义消息处理函数,输出文本“自定自定义消息义消息WM_MYMESSAGEWM_MYMESSAGE的处理函数被调用!的处理函数被调用!”。446.5 6.5 应用实例应用实例 【例例6.56.5】编编写写一一个个单单文文档档应应用用程程序序Sy2Sy2,程程序序运运行行后后,首首先先在在视视图图窗窗口口中中输输入入文文本本,然然后后通通过过键键盘盘上上的的光光标键控制该文本向左、向右、向上和向下标键控制该文本向左、向右、向上和向下4 4个方向移动。个方向移动。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!