Windows系统中的程序大部分都是通过消息和事件驱动的。在windows下的应用程序主要工作是进行消息的循环处理,通过循环等待消息的到来和事件的发生,然后对不同的消息和事件运行相关的代码,完成相应的操作。Windows提供了大量的消息,主要包括3种类型:标准消息、通知消息和命令消息。当然也可以根据用户的需要自定义一些消息。这些消息在MFC中有统一的处理框架,即消息映射机制。消息映射机制将消息及其处理函数表示成一一对应的表,并对这张表进行分析处理。

总的来说,MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可以知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。

无论时利用MFC向导还是手动添加消息处理时,都需要在源文件中增加三处代码:

1、在类的定义中添加消息处理成员函数的函数声明。

2、在类的消息映射表中加入相应的消息映射表项。

3、在类的实现中加入该消息处理成员函数的函数实现。

如果时自定义消息,则还需要在头文件中定义自定义消息的宏。

例如:要在ABC类中添加个自定义消息UM_AAA的处理,当消息产生的时候,响应OnAAA( )函数。可以按照下面四个步骤来实现:

1、在头文件ABC.H中定义自定义消息的宏。

#define UM_AAA   WM_USER+1

在windows系统中提供了大量的消息的同时可以给用户自定义消息提供了空间,我们在自定义消息的宏的时,只有选择WM_USER以上的数值就不会与系统提供的消息冲突了。

2、在头文件ABC.H中声明消息响应函数的OnAAA( )。

protected:

//{{AFX_MSG (ABC)

afx_msg  void  OnAAA( );

//}}AFX_MSG

DECLARE_MESSAGE_MAP( )

消息响应函数应该放在DECLARE_MESSAGE_MAP( )之前,AFX_MSG注释宏之间。该函数声明前不有一个afx_msg限定符,这也是一个宏,这个宏表面这个函数是一个消息响应函数的声明。

3、进行消息映射

BEIGIN_MESSAGE_MAP(ABC)

//{{AFX_MSG_MAP(ABC)

ON_MESSAGE(UM_AAA, OnAAA)

//}}AFX_MSG_MAP

END_MESSAGE_MAP( )

在END_MESSAGE_MAP( )之前的AFX_MSG_MAP注释宏之间用ON_MESSAGE( )将UM_AAA和OnAAA响应函数相关联起来。

4、在ABC.CPP中将消息响应函数的实现

void  OnAAA( )

{……}

只有按照上面的4个步骤,就可以根据自己的需要,在系统程序中添加合适的消息和响应函数了。

转载于:https://www.cnblogs.com/zd_ad/archive/2010/11/17/1879855.html

用MFC消息映射机制自定义消息相关推荐

  1. 【MFC系列-第9天】MFC消息映射机制的原理

    关注公号[逆向通信猿]更精彩!!! 第9天 MFC消息映射机制的原理 9.1 对话框常用的回调函数 a)窗口创建时的消息和虚函数包括:WM_CREATE,WM_INITDIALOG,和PreSubcl ...

  2. VC++/MFC消息映射机制(1):MFC消息映射原理

    VC++/MFC消息映射机制(1):模仿MFC的消息映射原理 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) <C++语法详解>网盘地址:https://p ...

  3. MFc消息映射机制理解

    何谓消息.消息处理函数.消息映射? 消息简单的说就是指通过输入设备向程序发出指令要执行某个操作.具体的某个操作是你的一系列代码.称为消息处理函数.在SDK中消息其实非常容易理解,当窗口建立后便会有一个 ...

  4. MFC消息映射机制概述

    消息 窗口消息一般由三个部分组成: 1)一个无符号整数,是消息值: 2)消息附带的 WPARAM 类型的参数: 3)消息附带的 LPARAM 类型的参数.其实我们一般所说的消息是狭义上的消息值,也就是 ...

  5. MFC消息响应机制及映射机制理解

    一.MFC消息响应机制分析 ---- MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,我们在这里,对它的整个消息映射机制进行了 ...

  6. 【转】MFC消息映射详解(整理转载)

    消息:主要指由用户操作而向应用程序发出的信息,也包括操作系统内部产生的消息.例如,单击鼠标左按钮,windows将产WM_LBUTTONDOWN消息,而释放鼠标左按钮将产生WM_LBUTTONUP消息 ...

  7. MFC消息映射与消息传递内幕

    MFC消息映射与消息传递内幕 Windows操作系统是以消息为基础,事件驱动的.作为程序员了解操作系统的消息传递机制是非常必要的.Microsoft的MFC有它自己的一套支持Windows操作系统消息 ...

  8. ATL与MFC消息分发机制的对比---由金山开源代码引出的思考(一)

    博客已迁移至:http://kulv.sinaapp.com/,这里不再使用 ATL与MFC消息分发机制的对比---由金山开源代码引出的思考 (一) 前几天刚看金山开源代码时写了一篇博客分析了一下其消 ...

  9. MFC 消息映射 消息传递MESSAGE_MAP 读深入浅出MFC感悟

    三种消息 标准的windows消息如WM_PAINT 命令消息(菜单和工具栏)WM_COMMAND 通知消息(对话框函数中)WM_NOTIFY(Windows9x新控件不在发送WM_COMMAND,而 ...

最新文章

  1. 黑白球JAVA_桶中取黑白球 - jiacut的个人页面 - OSCHINA - 中文开源技术交流社区
  2. 使用gcc的-finstrument-functions选项进行函数跟踪
  3. docker镜像打包save,载入load,启动run
  4. linux 查杀php木马,linux上php木马、后门查杀总结
  5. 第一行代码阅读笔记---基本知识
  6. 面向小姐姐的编程——JAVA面向对象之继承(二)
  7. windows8.1下安装Cygwin并通过apt-cyg安装软件包
  8. php怎么截取数组最后元素,PHP如何获取数组最后一个元素的键和值?(图文+视频)...
  9. matlab2c使用c++实现matlab函数系列教程-perms函数
  10. 脑电时频分析I:谱分析
  11. 态势感知平台分析流程
  12. linux配置dhcp服务器时authoritative参数的作用
  13. 74HC595芯片应用
  14. 计算1~N之间所有奇数之和(Java)
  15. sql语句左连接时的ON AND用法
  16. css英文文本不换行,CSS样式表让英文文本自动换行
  17. 开启这个数据缓存,一键加速你的小程序。
  18. 灰度图片及彩色图片像素点统计及显示
  19. 【bug修复】低版本工程导入Unity2018 Shader 报错
  20. win10安装visual studio2008

热门文章

  1. 【PAT】2020年秋季考试划水准备贴
  2. NYOJ324 - 猴子吃桃问题
  3. JavaScript浏览器window对象→简介、消息对话框、计时器、history、打开新窗口及模式showModalDialog、location、navigator、screen、窗口位置尺寸
  4. 枚举+贪心--经常用到的思路--过程不好弄是--枚举结果C. Elections
  5. 集训8.21树状数组讲解
  6. 量子计算机拓扑超导新状态,陈根:特殊超导体,有助于量子计算机运行
  7. OpenGL基础15:输入控制
  8. 牛客小白月赛8: E. 诡异数字(数位DP)
  9. fail树(bzoj 3172: [Tjoi2013]单词)
  10. HDU 6166 2017 多校训练:Senior Pan(最短路)