ON_NOTIFY消息中的id坑了我一天
2013-12-21 21:56
204 查看
使用CSplitterWnd切割窗口之后,在View类中使用CListCtrl Create了一个ListView
试图在ListView中获取Windows消息,发现怎么也捕获不到
使用vs2008添加鼠标消息默认使用NO_NOTIFY_REFLECT消息驱动
如果需要发送消息给CListCtrl创建的ListView则必须用ON_NOTIFY消息,但发现这么写也收不到消息
捣腾了一天没找到问题所在,然后开始检查ON_NOTIFY里面的参数发现
参数id是一个WORD型也即unsigned short,是一个四字节的变量!!
回头看我自己定义的LIST_UNIT_VIEW
如此,传入之后直接被截断成0!也即id传入了一个0的值,导致最终我的ListView收不到该鼠标消息!!!
最后把LIST_UNIT_VIEW定义为0x1000以内的立即解决了这个坑爹的问题!
试图在ListView中获取Windows消息,发现怎么也捕获不到
使用vs2008添加鼠标消息默认使用NO_NOTIFY_REFLECT消息驱动
BEGIN_MESSAGE_MAP(CUnitView, CListView) ON_WM_CREATE() ON_WM_SIZE() //ON_NOTIFY_REFLECT(NM_CLICK, &CUnitView::OnNMClick) ON_NOTIFY(NM_CLICK, LIST_UNIT_VIEW, &CUnitView::OnNMClick) END_MESSAGE_MAP()
如果需要发送消息给CListCtrl创建的ListView则必须用ON_NOTIFY消息,但发现这么写也收不到消息
捣腾了一天没找到问题所在,然后开始检查ON_NOTIFY里面的参数发现
#define ON_NOTIFY(wNotifyCode, id, memberFxn) \ { WM_NOTIFY, (WORD)(int)wNotifyCode, (WORD)id, (WORD)id, AfxSigNotify_v, \ (AFX_PMSG) \ (static_cast< void (AFX_MSG_CALL CCmdTarget::*)(NMHDR*, LRESULT*) > \ (memberFxn)) },
参数id是一个WORD型也即unsigned short,是一个四字节的变量!!
回头看我自己定义的LIST_UNIT_VIEW
#define LIST_UNIT_VIEW 0x00020000
如此,传入之后直接被截断成0!也即id传入了一个0的值,导致最终我的ListView收不到该鼠标消息!!!
最后把LIST_UNIT_VIEW定义为0x1000以内的立即解决了这个坑爹的问题!
相关文章推荐
- MFC里ON_COMMAND_RANGE消息映射的ID问题
- 请问如何响应TreeCtrl控件消息?利用ON_NOTIFY
- 响应树控件的消息用ON_NOTIFY
- ON_NOTIFY 消息详解
- 091022(星期四)TreeCtrl的控件通知消息1 OnNotify
- 关于退treectrl的on_notify 消息
- ON_NOTIFY处理消息
- 从ON_MESSAGE和ON_NOTIFY理解windows的消息机制
- MFC里ON_COMMAND_RANGE消息映射的ID问题
- 模板ID NgH7RUVrVbTFbqwUmhpjkZb5Tv9jKGSmqb3Prs1a8sA 开发者调用模板消息接口时需提供模板ID 标题 客户预约提醒 行业 医疗护理 - 护理美容 详细内容 {
- 多个按键点击映射到同一个消息函数中的方法(ON_COMMAND_RANGE)
- CToolBar CImageList 实现工具栏及提示功能 ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTip)
- How To Turn Up Logging on the Siebel Web Server Extension in Siebel Versions 7.x and 8.x? [ID 477185
- 判断软件的闲置时间(使用Application.OnMessage过滤所有键盘鼠标消息)
- 消息宏: ON_COMMAND_RANGE/ON_COMMAND_RANGE_UI
- WM_NOTIFY消息
- 基于id的游戏客户端事件分发(消息队列)
- ON_NOTIFY
- On RAC, expdp Removes the Service Name [ID 1269319.1]
- 自动增长的ID,插入特定的数字 set identity_insert ON OR OFF