设为首页 加入收藏

TOP

分析与理解VC的通知消息WM_NOTIFY(二)
2012-11-04 15:12:08 来源: 作者: 【 】 浏览:422
Tags:分析 理解 通知 消息 WM_NOTIFY
  WM_NOTIFY为何能完成如此的重任?

  原因:它扩展了消息的lParam参数,使它成为指向一个相对统一的结构的指针,从而使用这个结构来传递复杂的信息。

  1、无需附加的信息时:

 此结构为一个NMHDR结构:

NMHDR
{
HWnd hWndFrom ; //相当于原WM_COMMAND传递方式的lParam
UINT idFrom ; //相当于原WM_COMMAND传递方式的wParam(low-order)
UINT code ; //相当于原WM_COMMAND传递方式的Notify Code(wParam"s high-order)
}

  2、需要附加的信息时:

  此结构为一个大的结构,它的首成员必须为一个NMHDR结构的对象,它的其他成员放置此消息的附加信息。

  以LVN_KEYDOWN为例:

typedef struct tagLVKEYDOWN {
NMHDR hdr;
WORD wVKey;
UINT flags;
} NMLVKEYDOWN, FAR *LPNMLVKEYDOWN;

  WM_NOTIFY消息的处理(以LVN_KEYDOWN 为例)

void C*ListCtrl::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
....
....
}

  分析

  1、大结构的首个成员为NMHDR,这样,使用指向NMHDR的指针来传递结构地址,不论在仅使用NMHDR结构,还是在使用大结构的情况下都适合。

  2、因为此消息实际传递的即是对应的结构(NMHDR或以NMHDR作首成员的大结构)所以,如上进行强制转换,当然不会有问题。

  结束语

  使用上述WM_NOTIFY框架处理的消息很多,它们的处理架构与一般的消息处理类似,因此,本文没有对它的具体使用进行阐述,有着方面需求的读者,请自行参阅MSDN相关内容。

  另外,WM_NOTIFY消息和“消息反射”的关系十分紧密,我会尽快将我对“消息反射”的理解与分析,写出来与大家共享,再次感谢大家对本文的关注。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC实现Access2000文件密码操作技巧 下一篇用Visual C++操纵MS Word

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: