第5章:Windows应用程序引擎——消息映射

上传人:宝路 文档编号:46923546 上传时间:2018-06-28 格式:PPT 页数:65 大小:1.97MB
返回 下载 相关 举报
第5章:Windows应用程序引擎——消息映射_第1页
第1页 / 共65页
第5章:Windows应用程序引擎——消息映射_第2页
第2页 / 共65页
第5章:Windows应用程序引擎——消息映射_第3页
第3页 / 共65页
第5章:Windows应用程序引擎——消息映射_第4页
第4页 / 共65页
第5章:Windows应用程序引擎——消息映射_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《第5章:Windows应用程序引擎——消息映射》由会员分享,可在线阅读,更多相关《第5章:Windows应用程序引擎——消息映射(65页珍藏版)》请在金锄头文库上搜索。

1、第5章:Windows应用程序引擎 消息映射 教学要点本章内容包括消息的介绍(产生、发送、路由、接收),消息 映射和消息、消息响应函数的关系,常见窗口消息(键盘消息、鼠 标消息和定时器消息)的使用,消息监视工具Spy+使用。要求了解消息映射机制在MFC中的应用程序中的作用、利用 API发送同步和异步消息、自定义消息的建立方法,熟悉消息监视 工具Spy+的使用,掌握消息映射三个宏的含义、键盘消息、鼠标 消息和定时器消息有关概念与用法,熟练掌握在应用程序向导生成 的程序中定位到对应三个消息映射宏,并且自己思考MFC应用程 序的执行。Visual C+ Program Design内容简介v Win

2、dows操作系统下的应用程序都是基 于事件驱动而工作的。消息映射是一种把 消息映射到相应的消息响应函数上的机制 。 v Windows的各种消息沿着MFC应用程序 架构规定的路线,找到它的归宿消息 映射函数。当找不到的话,最终交给窗口 对象的DefWindowProc成员函数去进行默认 的处理。Visual C+ Program Design教学目标 1. 要求了解消息映射机制在MFC中的应用程序中的作 用 利用API发送同步和异步消息、自定义消息的 建立方法. 2. 熟悉消息监视工具Spy+的使用 3. 掌握消息映射三个宏的含义、键盘消息、鼠标消 息和定时器消息有关概念与用法 4. 熟练掌握

3、在应用程序向导生成的程序中定位到对 应三个消息映射宏,并且自己思考MFC应用程序的 执行过程中,为什么看不到API编程中的 WinMain()函数。 Visual C+ Program Design第5章 目录v 5.1 认识消息 v 5.2 MFC中消息的发送与接收 v 5.3 常用的窗口消息v 习题Visual C+ Program Design5.1 认识消息 消息机制是Win32程序设计的灵魂,Win应 用程序利用格式化的Windows消息与其它 Windows应用程序及Windows系统进行通讯。可 以使用GetMessage()函数来获取消息,然后利 用DispatchMessag

4、e()函数发送消息,最后由 窗口函数来进行消息的处理。MFC将面向对象 的C+编程思想与消息驱动机制结合在一起.Visual C+ Program Design5.1.1消息的产生5.1.2消息的种类 5.1.3一个应用程序的消息映射分析 5.1.4消息映射函数 *5.1.5用类向导管理消息映射 5.1 认识消息(下) Visual C+ Program Design5.1.1 消息的产生 Windows对每一个输入事件都产生一个消息,Windows应用程序也可以调用Windows函数,指示Windows给应用程序发送消息,Windows系统环境也可以给Windows应用程序发送消息,两个Wi

5、ndows应用程序之间也可通过WM_COPYDATA消息来共享数据。Visual C+ Program Design5.1.2 消息的种类 1.窗口消息(Windows message)窗口消息的产生一般与创建窗口、绘制窗口、移动窗口和销 毁窗口及在窗口中操作等操作有关 2.命令消息命令消息一般与处理用户的请求相关,是由某一用户接口事 件所出发的消息。 3.控件通知消息(Control notification)某些重要事件发生时,由控件或者其他类型的子窗口发送到 父窗口的消息。 4.自定义消息 有时候用户需要定义一些程序内部使用的消息,以区别于系 统定义的消息,这些用户自己定义的消息称为自定

6、义消息。 Visual C+ Program Design5.1.3 一个应用程序的消息映射分析 Windows靠消息的流动而转动,在利用 Win32 API开发图形界面的应用程序时,在核心的窗口函数(进行消息处理的函数)中使用 了一个大的switch/case结构进行流程的控制,对消息进行分门别类地控制。随着对响应消息 的增加,switch/case结构会出现多层嵌套,程序理解会出现很大的困难,为了解决这个问题 ,在MFC中引入了消息映射的概念。Visual C+ Program Design例: 一个简单的演示消息映射1生成程序框架 (1)启动VC6.0,选择“File”菜单的“New”命

7、令,在弹出 的“New”对话框中选择“Project”选项卡。 (2)在“Project”选项卡的列表中选择“MFC AppWizard(exe)”项,在“Project Name”编辑框中输入 要创建的工程名称MsgMap,在“Location”编辑框中设置 工程的存放位置,单击“OK”按钮。 (3)在弹出的“MFC AppWizard-Step1” 对话框中选择 “single document”,然后单击“Finish”按钮。 (4)在弹出的“New Project information” 对话框中单击 “OK”按钮,完成应用程序框架的创建。Visual C+ Program Desi

8、gn2消息映射消息映射是一种把Windows系统的各种消息(共四类消息)映射到MFC类库的成员函数上的机制。MFC的应用程序中,消息映射可以被MFC的CCmdTarget类或从其派生而来的任何一个类来使用。在上述生成的MsgMap单文档应用程序中,共有应用程序类、框架类、文档类、视图类和对话框类。这五个类都是从CCmdTarget类派生而来,所以Windows操作系统可以向所有这些类发送消息。Visual C+ Program Design3应用程序框架中的消息映射3应用程序框架中的消息映射编译并运行上述程序,在程序的主界面中,单击工具栏中的“?”按钮,则弹出“关于MsgMap”对话框,我们以

9、该功能的实现为例,来说明Windows中的命令消息的映射.Visual C+ Program Design(1) “?”工具栏按钮的资源IDVisual C+ Program Design(2)“?”工具栏按钮的消息映射利用应用程序向导生成的标准MFC应用程序 中,从CCmdTarget派生的类将消息与消息响应 函数通过一些预定义的宏联系起来,实现了一 一对应,这种机制就是消息映射,MFC中使用 的是功能强大的消息映射宏来实现的。它们是 DECLARE_MESSAGE_MAP(初始化消息映射表)、 BEGIN_MESSAGE_MAP(开始用户消息映射)、 END_MESSAGE_MAP(结束用

10、户消息映射)以及一 些ON_宏。Visual C+ Program Design 消息映射的声明 class CMsgMapApp : public CWinApp public: CMsgMapApp(); /应用程序类的构造函数 / Overrides 以下为可超载的虚拟函数 / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CMsgMapApp) public: virtual BOOL InitInstance(); /AFX_VIRTUALVisual C+ Program Design 消息映射的声明/

11、Implementation /AFX_MSG(CMsgMapApp) afx_msg void OnAppAbout();/工具栏按钮“?”的消息映射函数/ NOTE - the ClassWizard will add and remove member functions here. / DO NOT EDIT what you see in these blocks of generated code ! /AFX_MSG mapping macros here. / DO NOT EDIT what you see in these blocks of generated code!

12、Visual C+ Program Design 消息映射的定义 DECLARE_MESSAGE_MAP()/消息映射宏的声明 ; BEGIN_MESSAGE_MAP(CMsgMapApp, CWinApp) /AFX_MSG_MAP(CMsgMapApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) /工具栏“?“按钮ID_APP_ABOUT对单击的消息映射为OnAppAbout / NOTE - the ClassWizard will add and remove /AFX_MSG_MAP / Standard file based document com

13、mands ON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen) / Standard print setup command ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup) END_MESSAGE_MAP()Visual C+ Program Design4消息映射中的几种宏定义 消息映射中的映射都是一些定义好的宏,如 ON_WM_MOUSEACTIVATE,ON_COMMAND, ON_UPDATE_C

14、OMMAND_COMMAND_UI,ON_BN_CLICKED ,ON_MESSAGE,ON_REGISTER_MESSAGE等等,这些 宏根据消息类别的不同而不同,有的有参数,有的 无参数。表5.1是常见的宏。 Visual C+ Program Design表5.1 常见消息的映射宏 消息类型宏的形式参数定义的窗口消息ON_WM_xxxx无命令消息ON_COMMAND命令ID,消息映射函数名命令更新消息ON_UPDATE_COMMAN D同上控件通知消息ON_xxxx控件ID,消息映射函数名用户自定义消息ON_MESSAGE自定义消息ID,消息映射函数名注册窗口消息ON_REGISTERE

15、D_MES SAGE注册消息ID,消息映射函数名多个连续ID号的命令消息ON_COMMAND_RANG E连续命令的起始ID号和终止ID号多个连续ID号的命令更新 消息ON_UPDATE_COMMAN D_RANGE同上多个连续ID号的控件消息ON_CONTROL_RANGE控件通知码,连续控件的起始ID号和 终止ID号Visual C+ Program Design5.1.4 消息映射函数 当Windows接收到一个消息时,Windows通过查找消息映射表就能找到一个专门的处理函数来对其进行响应,该函数就是消息映射函数(又叫消息响应函数),它已经是相应类的成员函数。 Visual C+ Pr

16、ogram Design消息映射函数消息映射函数的实现代码为: void CMsgMapApp:OnAppAbout() /命令消息 的消息映射函数的实现 CAboutDlg aboutDlg;/声明一个“关于”对话框对象aboutDlgaboutDlg.DoModal();/调用对话框的成员函数DoModal显示对话框 Visual C+ Program Design5.1.5 用类向导管理消息映射 1. 管理消息 ClassWizard可以用于管理消息和用户交互对象 2. 管理成员变量 3. 管理ActivcX控件的事件与自动化 由于本书没有讲这方面的内容,故不作详细解释 。 Visual C+ Program DesignVisual C+ Program Design5.2 MFC中消息的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号