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学习(二):消息映射的更多相关文章

  1. (二)一个MFC程序,消息映射,纯代码

    1.应用程序类 CWinApp https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cwinapp-class?f1url=https%3A%2F%2 ...

  2. 深入浅出MFC学习笔记 消息

    本章将会对MFC的消息映射和 命令传递机制做深入探讨. MFC规定了消息传递的路线,消息会按照这个路线传递下去,找不到归宿的话就交给DefWindowProc. 在产生窗口之前,如果我们在创建窗口时指 ...

  3. Hibernate学习(二)关系映射----基于外键的单向一对一

    事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...

  4. MFC里ON_COMMAND_RANGE消息映射的ID问题

    今天在工作中遇到一个问题,一个动态菜单,每个菜单的菜单项ID是我自己定义的,定义如下: #define IDM_SEARCHRECORD0 222240 #define IDM_SEARCHRECOR ...

  5. MFC消息映射的原理:笔记

    多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里 ...

  6. 图解MFC基本框架(深入消息映射机制)

    首先,先看整体的消息流向图: 上图解释: 起点是消息循环,在winmain函数中(mfc中winmain函数是隐含的调用的,在app全局对象构造完后紧接着调用winmain函数),while循环中不断 ...

  7. MFC消息映射与命令传递

    题外话:刚开始学视窗程序设计的时候,我就打印了一本Windows消息详解,里面列举了各种已定义消息的意义和作用,共10多页,在编程的时候翻翻,有时觉得很受用.我发觉很多编程的朋友,虽然每天都面对消息, ...

  8. 剖析MFC六大关键技术(五六)--消息映射与命令传递

    说到消息,在MFC中,“最熟悉的神秘”可算是消息映射,那是我们刚开始接触MFC时就要面对的东西.有过SDK编程经验的朋友转到MFC编程的时候,一下子觉得什么都变了样.特别是窗口消息及对消息的处理跟以前 ...

  9. MFC原理第五讲.消息映射.以及如何添加消息

    MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...

随机推荐

  1. iOS学习之Xcode 的Debug技巧

    在Xcode中,Debug时,不能像eclipse ,或VS那些集成开发那样,能直接查看变量的值.那怎么在调试的时候查看XCode的变量呢? 有一些方法的. 1.新建一个Single View App ...

  2. 【原】Coursera—Andrew Ng机器学习—Week 9 习题—异常检测

    [1]异常检测 [2]高斯分布 [3]高斯分布 [4] 异常检测 [5]特征选择 [6] [7]多变量高斯分布 Answer: ACD B 错误.需要矩阵Σ可逆,则要求m>n  测验1 Answ ...

  3. 在MyEclipse中用debug调试应用程序

    F5:单步测试,作用是跳入,比如说一大步中分为10小步,单击F5一次就会走完一小步,走完这一大步则需要单步10次.F6:与F5一样也是单步测试.只不过与F5不同的是F5追求的是过程,而F6追求的是结果 ...

  4. 【Unity】关于U3d与bip骨骼适配

    http://blog.csdn.net/kiki110120/article/details/50371662 写在2015/12/21 1.Generic 在拿到美术FBX文件后,导入u3d,默认 ...

  5. 523. Continuous Subarray Sum是否有连续和是某数的几倍

    [抄题]: Given a list of non-negative numbers and a target integer k, write a function to check if the ...

  6. spring4-2-bean配置-6-使用外部属性文件

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAk0AAAFGCAIAAAD4tzxRAAAgAElEQVR4nO2d27HsOm+tOxWn4CeXAm ...

  7. javascript运算符优先级顺序

    1 ()2 !.-(负号).++.-- 3 *./.%4 +.- 10-55 <.<=.<.>=6 ==.!=.===.!==.7 &&8 ||9 ?:10 = ...

  8. PollingProvider方法的使用及示例

    来自<sencha touch权威指南>第12章,374页开始 ----------------------------------------------------- PollingP ...

  9. Oracle 更新Opatch、打补丁

    1.更新Opatch; 2.打补丁; 3.grid 打补丁; 1.更新Opatch(实验版本:oracle:11.2.0.3.0): 默认安装数据库后,在ORACLE_HOME 下会有个OPatch ...

  10. eclipse (android环境搭建)

    如何安装java环境 http://jingyan.baidu.com/article/a24b33cd59b58e19fe002bb9.html eclipse安装教程 http://jingyan ...