lParam参数

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消息和“消息反射”的关系十分紧密,我会尽快将我对“消息反射”的理解与分析,写出来与大家共享,再次感谢大家对本文的关注。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值