WM_COMMAND 和 WM_NOTIFY 的区别
来源:互联网 发布:大数据风险预警 编辑:程序博客网 时间:2024/05/20 11:50
当我们按下一个菜单选项,或者一个控件需要通知父窗口一个事件发生(如鼠标单击、双击等),或者快捷键被按下时,Windows将会发送一个 WM_COMMAND 消息给父窗口。那么 WM_COMMAND 消息参数是什么呢?
OK,一切运行的很好,通过 WPARAM 高位置1或0区分菜单、快捷键、或者控件事件Code,通过 WPARAM 低位可以知道发出WM_COMMAND消息的菜单项或控件ID,通过LPARAM知道控件句柄。
然而,有一天,当选中一个 ListControl 控件中的某一行时,人们忽然发现父窗口需要知道被选中该行的索引,这下为难了,对于控件来看,整个WM_COMMAND消息的WPARAM、LPARAM 都被塞的满满的。怎么办呢?这儿有一种解决办法:新增一个消息,就叫WM_LIST_CONTROL_CLICKED吧,如下:
呃,看起来的确解决了问题,我们把事件 Code 通过消息 ID 体现了出来,然后把被选中行的索引塞进了WPARAM的高位,看起来非常完美!然而又有一天,人们发现对ListView,父窗口需要知道单击该控件时选中的行号和列号,以便处理,照猫画虎,我们又加了一个WM_LIST_VIEW_CLICKED。接着人们发现其他一些控件都需要这样的改进,如果这样增加消息的话,岂不是没完没了了?!!
于是,WM_NOTIFY消息横空出世:
现在,我们将所有附加信息都存放在 NMHDR(Notify Message Handler)的一个结构体中,该结构体指针通过 LPARAM 通知到父窗口。NMHDR如下:
- typedef struct tagNMHDR
- {
- HWND hwndFrom; // 控件句柄.
- UINT_PTR idFrom; // 控件 ID.
- UINT code; // NM_ code.
- } NMHDR;
- typedef struct tagNMLISTVIEW
- {
- NMHDR hdr; // NMHDR.
- int iItem; // 行号.
- int iSubItem; // 列号.
- UINT uNewState;
- UINT uOldState;
- UINT uChanged;
- POINT ptAction;
- LPARAM lParam;
- } NMLISTVIEW, *LPNMLISTVIEW;
0 0
- WM_COMMAND 和 WM_NOTIFY 的区别
- WM_COMMAND 和 WM_NOTIFY 的区别
- WM_COMMAND 和 WM_NOTIFY 的区别
- WM_COMMAND 和 WM_NOTIFY 的区别
- WM_COMMAND 和 WM_NOTIFY 的区别
- WM_COMMAND和WM_NOTIFY区别
- WM_COMMAND 和 WM_NOTIFY 区别
- WM_COMMAND和WM_NOTIFY消息的区别
- WM_COMMAND和WM_NOTIFY有什么区别
- WM_COMMAND和WM_NOTIFY有什么区别?
- WM_COMMAND和WM_NOTIFY比较
- 关于WM_Notify和WM_Command
- 详解Windows消息分类以及WM_COMMAND与WM_NOTIFY的区别,以及模拟发送控件通知消息
- 详解Windows消息分类以及WM_COMMAND与WM_NOTIFY的区别,以及模拟发送控件通知消息
- WM_COMMAND,WM_NOTIFY等消息
- WM_COMMAND与WM_NOTIFY
- WM_COMMAND,WM_NOTIFY等消息
- 关于WM_COMMAND与WM_NOTIFY
- 黑盒测试
- 深入了解scanf()/getchar()/gets()/cin/cin.get/cin.getline()/getline()
- switch case语句
- 使用onsctl ping显示ons is not running
- 2015年年度总结
- WM_COMMAND 和 WM_NOTIFY 的区别
- Activiti入门教程三(详解流程引擎配置)
- hdu 5437(Alisha’s Party)
- Mybatis 1.动态sql 2.模糊查询
- POJ 1611 The Suspects
- Python 生成器
- iOS开发之即时通讯之Socket(AsyncSocket)
- Java各种排序算法
- hdu5442 Favorite Donut(后缀数组求正逆序中字典序最大的字符串)