分析与理解通知消息-WM_NOTIFY

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 续

请大家原谅我的宣传方式吧,一直喜欢自己有个个人博客,但个人博客坏处就是少人能交流问题,欢迎大家加我好友什么的,谢谢。

posted on 2010-09-01 16:31  Pro.Charm  阅读(493)  评论(0编辑  收藏  举报

导航