Visual C++中MFC消息的分为三类:标准(窗口)消息、命令消息、控件消息。

1、标准(窗口)消息:窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或从窗口发到系统。发送函数SendMessage()或者PostMessage()。除WM_COMMAND之外,所有的以WM_开头的消息。从CWnd派生的类,都可以接受到这类消息。注意:标准消息并不需要我们指定处理函数名称,是默认的对应关系。

宏名称 对应消息 消息处理函数
ON_WM_CHAR WM_CHAR OnChar
ON_WM_CLOSE WM_CLOSE OnClose
ON_WM_CREATE WM_CREATE OnCreate
ON_WM_DESTROY WM_DESTROY OnDestroy
ON_WM_LBUTTONDO WNWM_LBUTTONDOWN OnLButtonDown
ON_WM_LBUTTONUP WM_LBUTTONUP OnLButtonUp
ON_WM_MOUSEMOVE WM_MOUSEMOVE OnMouseMove
ON_WM_PAINTWM_PAINT OnPaint 

2、命令消息:命令消息通常与处理用户请求有关,当用户单击一个菜单或工具栏时,命令消息就产生了。并发送到能处理该消息的类或函数(如装载文本,保存选项等)这类消息都以WM_COMMAND呈现。在MFC中,通过菜单标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CCmdTarget派生的类,都可以接收到这类消息,其wParam 记录着该消息来自哪一个菜单项目。

ON_COMMAND(IDM_ABOUT, OnAbout)
ON_COMMAND(IDM_FILENEW, OnFileNew)
ON_COMMAND(IDM_FILEOPEN, OnFileOpen)
ON_COMMAND(IDM_FILESAVE, OnFileSave) 

3、控件消息:由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口通(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。从CCmdTarget派生的类都可以接收到这类消息。

控件宏 消息处理函数
Button ON_BN_CLICKED(<id>,<memberFxn>) memberFxn
ComboBox ON_CBN_DBLCLK(<id>,<memberFxn>) memberFxn
Edit ON_EN_SETFOCUS(<id>,<memberFxn>) memberFxn
ListBox ON_LBN_DBLCLK(<id>,<memberFxn>) memberFxn 

CWnd是CCmdTarget的派生类,在MFC的单文档程序中的CMenuApp和CMenuDoc都是属于CCmdTarget的派生类而不包含CWnd类。

MFC命令消息的路由:AfxWndProc(替换了窗口过程函数)->AfxCallWndProc->WindowProc->OnWnddMsg->(如果是命令消息则调用Oncommand;如果是通告消息则调用OnNotify)->OnCmdMsg 
标准消息和非标准消息的区分:标准消息:带有控制后 后续操作;非标准消息:只是简单提示。

你可以在程序的许多类别之中设计「消息映像表格」(每一个类别只能拥有一个消息映像表格,但也可以没有),接收并处理消息。只要是 CWnd 衍生类别,就可以拦下任何 Windows 消息。与窗口无关的MFC 类别(例如 CDocument 和 CWinApp)如果也想处理消息,必须衍生自 CCmdTarget,并且只可能收到 WM_COMMAND 命令消息。

转载于:https://www.cnblogs.com/rainbow70626/p/8034932.html

Visual C++中MFC消息的分类相关推荐

  1. 在Visual C++中常用到得一些绘图或者控件的语句(mfc)

     为快速开发学mfc,推荐看吕鑫的教学视频,因为这个比较清楚百度搜索 吕鑫mfc就可以了!  这个就挺好:http://www.tudou.com/programs/view/sirRzIM0gj0 ...

  2. [转]在Visual C++中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误

    症状 当 C 运行时 (CRT) 库和 Microsoft 基础类 (MFC) 库的链接顺序有误时,可能会出现以下 LNK2005 错误之一: nafxcwd.lib... 当 C 运行时 (CRT) ...

  3. VS2017中MFC的C++设计中给其它窗口发中文消息

    VS2017中MFC的C++设计中给其它窗口发中文消息 // MFCApplication1Dlg.cpp: 实 现 文 件 // #include "pch.h" #includ ...

  4. Visual C++ 2019中MFC图像处理编程(一) 位图文件的介绍

    Visual C++ 2019 中 MFC 图像处理编程(一) 1.1 位图文件及其C++操作 Windows操作系统中使用最多的图形文件格式就是位图格式,最常见的位图文件的扩展名为BMP.BMP是英 ...

  5. Visual C++程序设计——MFC整理笔记

    In me the tiger sniffs the rose."  心有猛虎,细嗅蔷薇. 人心拥有猛虎和蔷薇的两面体,若缺少了蔷薇就难免变得莽撞,从而流入庸俗:若缺少了猛虎就难免变得懦弱, ...

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

    独酌逸醉(博客搬至http://www.perfect-is-shit.com/,本博不再更新!) Keep It Simple,Stupid! 博客园 首页 博问 闪存 联系 管理 随笔-63  文 ...

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

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

  8. MFC消息映射机制概述

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

  9. Visual C++中的异常处理浅析[轉]

         Visual C++提供了对C语言.C++语言及MFC的支持,因而其涉及到的异常(exception)处理也包含了这三种类型,即C语言.C++语言和MFC的异常处理.除此之外,微软对C和C+ ...

最新文章

  1. python正则表达式模块
  2. 单链表--键盘输入、插入、删除、查询、输出
  3. 求平方根sqrt()函数的底层算法效率问题
  4. 【经典回放】多种语言系列数据结构算法:基数排序
  5. java mask_Java 三大属性:
  6. 更新Svn客户端后,右键菜单中没有TortoiseSVN
  7. JAVA解决实例问题_解决java方法
  8. 在WSL下安装MYSQL的实验报告_Linux(wsl)安装docker和mysql主从搭建
  9. springboot项目控制层的接口注入报错
  10. 一文搞定权限管理!授权、鉴权超详细解析
  11. Linux C编程(五) 之 gdb详解
  12. YOLOV4-模型集成-pytorch
  13. 物联网是如何工作的?
  14. C 语言的控制台输出只是 “黑底白字”吗 ?
  15. matlab 分式,MATLAB怎样把该式子化成咱们常用的分式结构
  16. oracle查看多少表,oracle查看所有表及各表行数?
  17. Scaffold 详解
  18. fiddler mac教程_Mac下使用Fiddler步骤
  19. 备份数据库 用友NC
  20. 基于YOLOV5动态检测19种类别

热门文章

  1. java aes 解密 文件_Java AES文件加解密
  2. 修改linux资源限制参数命令,linux passwd命令参数及用法详解--linux修改用户密码命令...
  3. LeetCode 03. 无重复字符的最长子串
  4. python paramiko模块下载_Python自动化运维实战:使用Python管理网络设备
  5. vsm java_java – 我尝试使用JAXB将对象编组到xml文件中时,错误为“缺少@XmlRootElement注释”...
  6. 控制台发送get命令_.NET Core使用命令行参数库构建控制台应用程序
  7. 与计算机相关的社团活动,计算机社团活动记录.doc
  8. linux mcelog 运行,服务器硬件检测(采用mcelog)
  9. matlab优化 带参数设置,优化选项参考 - MATLAB Simulink - MathWorks 中国
  10. ns3中调试程序------命令行、gdb和logging系统