谈谈MFC中的消息映射(5)
比如:假设你想成员函数OnKeydownList1处理ClistCtrl(标识ID=IDC_LIST1)的 LVN_KEYDOWN消息,你可以使用类向导添加如下的消息映射:
ON_NOTIFY( LVN_KEYDOWN, IDC_LIST1, OnKeydownList1 )
在上面的例子中,类向导提供如下函数:
void CMessageReflectionDlg::OnKeydownList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler
// code here
*pResult = 0;
}
这时类向导提供了一个适当类型的指针.你既可以通过pNMHDR,也可以通过 pLVKeyDow来访问这个通知结构。
如前所述,有时我们可能需要为一组控件处理相同的WM_NOTIFY消息.这时需要使用ON_NOTIFY_RANGE而不是ON_NOTIFY.当你使用 ON_NOTIFY_RANGE时,你需要指定控件的ID范围.其消息映射入口及函数原型如下:
ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn )
参数说明:
wNotifyCode:消息通知码.比如:LVN_KEYDOWN,
id: 第一控件的标识ID。
idLast:最后一个控件的标识ID。(标识值一定要连续)
memberFxn: 消息处理函数。
成员函数必须有如下原型申明:
afx_msg void memberFxn( UINT id, NMHDR * pNotifyStruct, LRESULT * result );
其中id的表示发送通知消息的控件标识ID
结束语:
于目前介绍MFC消息映射的资料甚少.而这部分内容对编程又相当重要.本文简要地介绍了MFC中的几种重要的消息映射处理.但基于篇幅有限没能作更全面更深入的探讨.