MFC学习(二):消息映射
1. 消息映射表的组成
- 宏DECLARE_MESSAGE_MAP,用在类的声明中,用来声明消息映射表。
- 宏BEGIN_MESSAGE_MAP,在使用类声明外,用来定义链接节点和填写链表节点中的数据,其格式为BEGIN_MESSAGE_MAP(类名称, 基类名称)。
- 宏ON_XXXX,用于填写类消息映射表中的单个表项,使用在BEGIN_MESSAGE_MAP的后面。
- 宏END_MESSAGE_MAP,消息处理函数表的结束宏,是表示消息映射表结束的标志。
2. 单个表项的消息类型
- 标准消息/窗口消息(Window Message)
- ON_WM_XXXX,如ON_WM_LBTRRONDOWN、ON_WM_CREATE等。
- 一般与窗口的内部运作有关,如创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。
- 没有参数,不需要传递消息ID或处理函数,因为都有标准的消息处理函数。
- 命令消息
- 来自菜单、工具条按钮、加速键等用户接口对象的WM_COMMAND通知消息
- 是应用程序自己定义的消息,系统没有标准的标识和默认的消息处理函数,所以用宏来实现命令消息映射时,需要指定消息标识ID、对应的消息处理函数。
- 一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如,装载文件、编辑文本和保存选项等)。
- ON_COMMAND和ON_UPDATE_COMMAND_UI
- ON_COMMAND:点了按钮或菜单项后的响应消息,处理该按钮或菜单等对应的功能。
- ON_UPDATE_COMMAND_UI
- 用来表示对应的按钮和菜单项的状态的响应消息,处理该按钮或菜单对应的用户界面显示状态,比如选中、变灰,通常与ON_COMMAND一起出现
- 如果在逻辑代码中设置控件的状态,包括选择,不可用等,要设的地方很多,效率低,容易遗漏,不易修改。ON_UPDATE_COMMAND_UI 很好地解决了这个问题,基本原理是当进程空闲时,应用程序自动产生WM_IDLEUPDATECMDUI消息,更新所有控件状态。
- 所以一般ON_COMMAND比ON_UPDATE_COMMAND_UI要多
- 消息标识ID可以是资源文件中菜单项等的ID
- 通知消息/控件通知
- 由按钮、文本编辑框等控件产生的消息。
- 由于控件种类很多,所以实现消息映射宏的格式也不尽相同,比如ON_BN_CLICKED、ON_CBN_DBLCLK等。
- 通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。
- 控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用组合框初建时得不到的消息填充它。
MFC学习(二):消息映射的更多相关文章
- (二)一个MFC程序,消息映射,纯代码
1.应用程序类 CWinApp https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cwinapp-class?f1url=https%3A%2F%2 ...
- 深入浅出MFC学习笔记 消息
本章将会对MFC的消息映射和 命令传递机制做深入探讨. MFC规定了消息传递的路线,消息会按照这个路线传递下去,找不到归宿的话就交给DefWindowProc. 在产生窗口之前,如果我们在创建窗口时指 ...
- Hibernate学习(二)关系映射----基于外键的单向一对一
事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...
- MFC里ON_COMMAND_RANGE消息映射的ID问题
今天在工作中遇到一个问题,一个动态菜单,每个菜单的菜单项ID是我自己定义的,定义如下: #define IDM_SEARCHRECORD0 222240 #define IDM_SEARCHRECOR ...
- MFC消息映射的原理:笔记
多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里 ...
- 图解MFC基本框架(深入消息映射机制)
首先,先看整体的消息流向图: 上图解释: 起点是消息循环,在winmain函数中(mfc中winmain函数是隐含的调用的,在app全局对象构造完后紧接着调用winmain函数),while循环中不断 ...
- MFC消息映射与命令传递
题外话:刚开始学视窗程序设计的时候,我就打印了一本Windows消息详解,里面列举了各种已定义消息的意义和作用,共10多页,在编程的时候翻翻,有时觉得很受用.我发觉很多编程的朋友,虽然每天都面对消息, ...
- 剖析MFC六大关键技术(五六)--消息映射与命令传递
说到消息,在MFC中,“最熟悉的神秘”可算是消息映射,那是我们刚开始接触MFC时就要面对的东西.有过SDK编程经验的朋友转到MFC编程的时候,一下子觉得什么都变了样.特别是窗口消息及对消息的处理跟以前 ...
- MFC原理第五讲.消息映射.以及如何添加消息
MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...
随机推荐
- nginx-rtmp-module--------------WIKI
https://github.com/arut/nginx-rtmp-module/wiki/Directives#idle_streams ============================= ...
- 1001.害死人不偿命的(3n+1)猜想
题目截图: 思路: 简单模拟.具体见另一篇博客. 代码: /* 1001.害死人不偿命的(3n+1)猜想 */ #include <stdio.h> #include <string ...
- C++异常处理(转)
引言 异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题.而传统错误处理技术,检查到一个局部无法处理的问题时: 1.终止程序(例如atol,atoi ...
- objective-C 的内存管理之-实例分析
objective-C 的内存管理之-实例分析 注:这是<Objective-C基础教程>一书上的实例,但是原书限于篇幅,分析得比较简单,初次阅读看得比较费劲,这里展开详细讨论一下. 场景 ...
- WCF配置Tcp协议
注意点: 1,<serviceMetadata httpGetEnabled="false"/> 2, <services> ...
- aws s3 python sdk
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.get_object abort_multipar ...
- VUE+WebPack游戏设计:欲望都市,构建类RPG游戏的开发
- iOS8 无缝切换WKWebView,借鉴IMYWebview,解决进度条,cookie,本地页面等问题
webkit使用WKWebView来代替IOS的UIWebView和OSX的WebView,并且使用Nitro JavaScript引擎,这意味着所有第三方浏览器运行JavaScript将会跟safa ...
- spring源码学习——spring整体架构和设计理念
Spring是在Rod Johnson的<Expert One-On-One J2EE Development and Design >的基础上衍生而来的.主要目的是通过使用基本的java ...
- 注意for循环中变量的作用域-乾颐堂
1 2 for e in collections: pass 在for 循环里, 最后一个对象e一直存在在上下文中.就是在循环外面,接下来对e的引用仍然有效. 这里有个问题容易被忽略,如果在循 ...