[转]MFC中ON_COMMAND, ON_MESSAGE, ON_NOTIFY它们的区别
ON_COMMAND是菜单和工具栏项处理消息的宏
ON_MESSAGE是处理自定义消息的宏
ON_NOTIFY 是控件向其父窗口发送消息处理的宏
对这几个消息的理解要先了解一下Window消息的背景。
在Windows3.1里,控件会将mouse, keybord等等的消息通知它的父窗口, 使用的消息就只有WM_COMMAND, 事件种类和控件ID被包含在wParam中, 控件的句柄包含在lParam中。由于wParam和 lParam已经满了,当控件要向父窗口发送其它特殊消息同时附带很多信息的时候就没有地方可以存放它们了。所以Windows3.1中定义了许多其它的消息种类,比如WM_VSCROLL, WM_CTLCOLOR等等,每种消息wParam,lParam中附带的信息是不同的。
当到了Win32后,控件的种类越来越多,当然不可以为每一个控件都定义一套消息,这样也不利于系统的扩充。所以在Win32中定义了唯一一个强大的消息 WM_NOTIFY。当然WM_NOTIFY也遵守原来的消息规则,既只带参数wParam和lParam。唯一不同处在于,此时的lParam中传送的是一个NMHDR指针。不同的控件可以按照规则对NMHDR进行扩充,因此WM_NOTIFY消息传送的信息量可以相当的大,这个可以看看MSDN中的相关说明,TreeControl中就有很多这种消息。
现在就可以知道为什么有ON_MESSAGE ,ON_COMMAND, , ON_NOTIFY了。
ON_MESSAGE是处理所有的Windows的消息的,因为所有的消息都以相同的格式传送,也就是ID, WPARAM, LPARAM.
ON_COMMAND是专门处理WM_COMMAND消息的,这样我们就不用自己解开WM_COMMAND中wParam和lParam中传送的控件ID,事件种类…(所有的都在MFC内部解决了:),当然方便了。
ON_NOTIFY更是不用说了,看看他的处理函数,是不是把NMHDR解出来了。
这样一样就一目了然了,ON_COMMAND和ON_NOTIFY都可以用ON_MESSAGE来处理,只不过自己要多做很多事情。ON_COMMAND和ON_NOTIFY最好就不要互换了!
转载于:https://www.cnblogs.com/foxhengxing/archive/2012/04/07/2436267.html
[转]MFC中ON_COMMAND, ON_MESSAGE, ON_NOTIFY它们的区别相关推荐
- MFC中UpdateData(TRUE) 和UpdateData(FALSE) 区别
UpdateData()的默认参数为TRUE 一.UpdateData(TRUE)用于刷新控件的值到变量; 举个例子,DDX_Text(pDX, IDC_EDIT1, m_heheh),当我们在静态文 ...
- ON_MESSAGE,ON_COMMAND和ON_NOTIFY的区别和联系
ON_COMMAND是菜单和工具栏项处理消息的宏 ON_MESSAGE是处理自定义消息的宏 ON_NOTIFY 是控件向其父窗口发送消息处理的宏 对这几个消息的理解要先了解一下Window消息的背景. ...
- VC/MFC中常用宏的含义
VC/MFC中常用宏的含义 Visual C++ MFC 中常用宏的含义(转载) AND_CATCHAND_CATCH AND_CATCH(exception_class,exception ...
- MFC中的Document-View结构
MFC之所以为Application Framework,最重要的一个特征就是它能够将管理数据的程序代码和负责显示数据的程序代码分离开来,而这种能力有Document/View提供. 想要实现数据管理 ...
- 11、MFC中自定义消息
MFC中自定义消息 消息映射.循环机制是Windows程序运行的基本方式.VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难.在MFC ClassW ...
- MFC中使用自定义消息 .
HTML Tags and JavaScript tutorial MFC中使用自定义消息 MFC中使用自定义消息 消息映射.循环机制是Windows程序运行的基本方式.VC++ MFC 中有许多现成 ...
- 在MFC中如何自定义消息及相应事件(VC6.0及VS2005)
在MFC中如何自定义消息及相应事件(VC6.0及VS2005) 2012-01-01 16:42:18| 分类: VS2005&VC++ | 标签:自定义消息 message |字号 ...
- MFC中快速应用OpenCV(转)
转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV 简介和缘 ...
- 如何在MFC中使用cout和printf,输出到控制台
在MFC中使用cout和printf,输出到控制台 在GUI程序中使用printf函数以及cout函数的方法: #include <io.h> #include <fcntl.h ...
最新文章
- linux数组删除数据,JavaScript在数组的循环中删除元素
- linux系统硬盘数据恢复软件下载,Linux硬盘数据恢复软件
- Python中的if __name__ == ‘__main__‘
- utf8编码-汉字几字节
- [骗分技巧——随机化Ⅱ] [Poi2014]Couriers,CodeChef - TKCONVEX
- 今天听说了一个压缩解压整型的方式-group-varint
- SQL Server安全(8/11):数据加密(Data Encryption)
- python3.7.3安装教程和配置idle_python 3.7.0 安装配置方法图文教程
- html5复习分类,HTML5考试复习资料.doc
- [emacs] 用 ido 或 anything 进行选择
- request一些常用方法
- C#中扩展StringBuilder支持链式方法
- HDU 5980 2016ICPC大连 J: Find Small A
- LeetCode刷题——75. 颜色分类
- URLDecoder.decode 过时
- 微型计算机安装调试维修中级题库,调试维修工中级题库(答案).doc
- js获取当前url路径
- 2020-04-10盘后总结,缩量下跌,成交量低迷
- 捋一捋Python的文件处理(上)
- matlab 2015 积分,Matlab中如何求解积分?
热门文章
- mysql 列 随机数_MYSQL中生产随机数或随机字符串
- pdf 一键生成书签目录
- python的几个实用命令_你不知道的几个Python命令,比Excel好用多了
- [leetcode]5321. 阈值距离内邻居最少的城市
- 2017乌鲁木齐ICPC: I. A Possible Tree(带权并查集)
- 如何使用VS2012进行简单程序的DEBUG(入门级)
- 2017杭电ACM集训队单人排位赛 - 1(ALL题解)
- IoU实现 python
- python中numpy.transpose()函数详解
- 简单直观理解形态学中的开运算和闭运算