ON_NOTIFY消息中的id坑了我一天
使用CSplitterWnd切割窗口之后,在View類中使用CListCtrl Create了一個ListView
試圖在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消息,但發現這么寫也收不到消息
#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,是一個四字節的變量!!
#define LIST_UNIT_VIEW?? ?0x00020000
如此,傳入之后直接被截斷成0!也即id傳入了一個0的值,導致最終我的ListView收不到該鼠標消息!!!
最后把LIST_UNIT_VIEW定義為0x1000以內的立即解決了這個坑爹的問題!
?
總結
以上是生活随笔為你收集整理的ON_NOTIFY消息中的id坑了我一天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ON_MESSAGE,ON_COMMAN
- 下一篇: 视口和窗口的理解方法