1、问题的提出:
在Windows3.x中,不存在WM_NOTIFY消息,控制子窗口的通知消息同菜单的命令消息及加速键消息一样,均使用WM_COMMAND来发送,此时,根据WM_COMMAND消息传递的做法,可知道含有如下的传递结构:
wParam high-order : Notify Code :(如TTN_NEEDTEXT)
wParam low-order : ControlID
lParam : ControlHandle
使用上述结构进行消息的传递时,如果一个通知消息有一些附加的消息需要发送时(如传递LVN_COLUMNCLICK时可能需要附加传送如点击的是那一列等信息),又或者需要获取鼠标双击的list control 的某一具体ITEM时,因为WM_COMMAND仅能传递如上的参数,故无法做到。
2、解决办法
通过把lParam指向某些特定结构体以附加更多的信息。
以获取双击list control列表的某一具体项为例:
假如wParam 的ControlID 为list control 的ID时候,lParam指向结构体:
typedef struct tagNMLISTVIEW { NMHDR hdr; int iItem; int iSubItem; UINT uNewState; UINT uOldState; UINT uChanged; POINT ptAction; LPARAM lParam; } NMLISTVIEW, *LPNMLISTVIEW;
这样,就实现了附加参数的传递,类似的做法在Windows3.x中随处可见。
更多内容请看我的新博客 分析与理解通知消息-WM_NOTIFY 续
请大家原谅我的宣传方式吧,一直喜欢自己有个个人博客,但个人博客坏处就是少人能交流问题,欢迎大家加我好友什么的,谢谢。