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. **python实现的单例模式

    设计模式中,最简单的一个就是 “单例模式”. 所谓单例,是指一个类只有一个全局实例. 单例模式的使用场景: 1. Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉 ...

  2. Spring Boot实践——Filter实现

    Filter介绍 Filter是Servlet规范规定的,不属于spring框架,也是用于请求的拦截.但是它适合更粗粒度的拦截,在请求前后做一些编解码处理.日志记录等. 一个Filter包括:1).在 ...

  3. then()方法是异步执行

    then()方法是异步执行 就是当.then()前的方法执行完后再执行then()内部的程序 这样就避免了,数据没获取到等的问题

  4. hibernate中 criteria.setProjection(Projections.rowCount()).uniqueResult()为null的Bug

    在hibernate中,在查询总数时,会使用如下方法; public Integer getCount(final DetachedCriteria detachedCriteria) {       ...

  5. Redis常用类型数据操作

    sortedset: 添加: zadd key score1 member1 score2 member2...  zad mysort 90 laosong 100 zhangsan 获得:zsco ...

  6. 领域Command

    一.项目结构 二.代码 /// <summary> /// /// </summary> public interface ICommand { } /// <summa ...

  7. 战地记者也在使用Scrum

    2011年埃及骚乱 2011年1月25日开始,埃及人民由于不满物价上涨.失业率高和腐败等问题,埃及多个城市发生民众大规模集会,要求总统穆巴拉克下台.本来这只是一场小规模的抗议活动,却如星火燎原般点燃了 ...

  8. MaperReduce实验

    目录 MaperReduce实现WordCount程序二次排序 前期准备 1. 工程结构 2. 编写自定义NewKey类 3. 编写WCMapper类 4. 编写WCReduer类 5. 编写作业描述 ...

  9. Oracle中关于DateTime的一些描述

    转载自:http://www.cnblogs.com/fmxyw/archive/2008/08/26/1276850.html 在做话务报表,参考一下信息   to_date()与24小时制表示法及 ...

  10. python 中的type

    1. type(object) -> the object's type 返回的是object的类型,即对象的类定义 例如:用元类动态生成子类metaclass = type(father)   ...