- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 第2章 Windows 窗口命令 Windows应用程序都是基于消息驱动的,应用程序通过消息与用户进行交互。消息分为标准Windows消息、控件通知消息和命令消息三大类,程序员需要为用户所关心的消息建立消息映射并编写具有特定功能的消息处理函数。 2.1 消息与命令 Windows应用程序都是消息驱动的,消息处理是Windows应用程序的核心。消息是操作系统通知应用程序某个事件已经发生的一种方式,例如当用户敲击键盘、点击菜单、移动鼠标或改变窗口大小时,都会向适当的窗口发送消息。同样,MFC应用程序也要处理Windows消息,但是由于MFC类库中已经封装了消息和对消息的响应事件,这就使在用Visual C++开发Windows应用程序时,对消息的处理更加简单和易于维护。 应用程序在初始化完成后,将调用CWinApp的成员函数Run来处理消息循环,消息循环不断检索由各种事件产生的消息,并将消息分发给适当的窗口。窗口接收到消息后,将调用专门的处理函数来处理各种消息。消息处理函数通常是某个类的成员函数,编写消息处理函数是编写MFC应用程序的主要任务。 2.1.1 响应消息的实例 2.1.2 消息的种类 1.标准Windows消息 标准Windows消息主要分为三类。 (1)键盘消息 (2)鼠标消息 (3)窗口消息 2.控件消息 3.命令消息 (1)用户界面对象 图2.4说明了用户界面对象的处理过程。 (2)命令ID (3)命令目标 (4)命令和控件消息的处理函数 选择用户界面对象, 如Clear All菜单项 产生命令消息 ID_EDIT_CLEAR_ALL 命令—目标消息映射 ON_COMMAND 调用消息处理函数 OnEditClearAll() 图2.4 用户界面对象处理过程 2.1.3 消息的发送和接收 1.标准Windows消息和处理函数 2.命令消息的发送 MFC把命令消息发送给命令目标链(有可能处理该消息的一系列对象),其中至少有一个对象含有处理该命令消息的消息处理函数。命令目标链中的对象接收到消息后,将检查自己的消息映射,查看是否能处理相应的消息。不同对象检查消息映射的时机是不同的,也就是说,消息是按一定优先顺序在命令目标链中传递的。通常,每个命令目标类先把命令消息发送给某些其它对象,给其它对象先行处理该命令消息的机会。 表2.3列出了常用目标类的命令发送顺序。 表2.3 标准命令的发送顺序 接收到命令的命令目标类 查询命令的顺序 MDI主边框窗口 1) 活动的MDI子窗口 2) 主边框窗口 3) 应用程序(CWinApp类对象) MDI子框架窗口 1) 活动视图 2) 子框架窗口 SDI边框窗口 1) 活动视图 2) 框架窗口 3) 应用程序(CWinApp类对象) 视图 1) 视图 2) 与视图相连的文档 文档 1) 文档 2) 与文档相连的文档模板 对话框 1) 本对话框 2) 拥有本对话框的窗口 3) 应用程序(CWinApp类对象) 2.1.4 消息映射的结构 消息映射都由一组宏组成,可以参照【例2.1】的源代码,在CMousePositionView.cpp文件中,我们可以看到以下代码: BEGIN_MESSAGE_MAP(CMousePositionView, CView) //{{AFX_MSG_MAP(CMousePositionView) ON_WM_MOUSEMOVE() //}}AFX_MSG_MAP END_MESSAGE_MAP() 1.消息映射的继承关系 2.消息映射的结构 表2.4列出了常用的映射宏及其语法格式。注意,映射宏之后不能用分号。 3.手工添加消息映射 表2.4 常用映射宏及其语法 消息类型 宏格式 参 数 标准Windows消息 ON_WM_XXX 无参数 命令消息 ON_COMMAND 命令ID,处理函数名 命令更新通知消息 ON_UPDATE_COMMAND_UI 命令ID,处理函数名 控件通知消息 ON_XXX 命令ID,处理函数名 用户自定义消息 ON_MESSAGE 自定义消息ID,处理函数名 已注册Windows消息 ON_REGISTERED_MESSAGE 消息ID,处理函数名 命令ID范围 ON_COMMAND_RANGE 起始命令ID,结束ID,处理函数名 将更新的命令ID范围 ON_UPDATE_COMMAND_UI_RANGE 起始命令ID,结束ID,处理函数名 控件ID范围 ON_CONTROL_RANGE 控件通知码,起始控件ID,结束ID,处理
文档评论(0)