2008-11-03 242 views
1

只是想知道有以下前綴MFC控制消息之間的區別是:MFC事件處理程序

LVN (e.g. LVN_ITEMCHANGED) 
HDN (e.g. HDN_TRACK) 
NM (e.g. NM_HOVER) 

另外,我使用的是列表控件和誘捕當使用NM_CLICK消息的項目的用戶點擊。我還想要在用戶選擇一個新項目時查看一個鍵,例如上/下箭頭鍵。任何人都可以告訴我,我應該陷入這個消息嗎?

感謝

回答

2

對於選擇的變化,你需要處理LVN_ITEMCHANGED通知:

NMLISTVIEW & nm = *(NMLISTVIEW *) pnmh; 
if ( (nm.uNewState^nm.uOldState) & LVIS_SELECTED) 
{  
    // nm.iItem was selected or deselected 
    if (!m_internalUIChange) 
    { 
     // see below 
    } 
} 

第一個「如果」檢查是否「選定」狀態已更改。請注意,在列表中選擇不同的項目時,它仍會激發兩次:一次爲舊項目取消選擇,一次爲新項目選擇。然而,這是必要的,以獲取「完全取消選擇」。

此通知會經常觸發 - 即使以編程方式修改控件也是如此。如果你的處理程序只對用戶事件作出反應,至少需要一個你設置的標誌來使這些操作變得複雜(我使用一個RAII-Lock類,所以我不會忘記重置它)

+0

夢幻般的答案 - 謝謝! :) – Konrad 2008-11-03 17:02:31

4
  • LVN = ListView的通知
  • HDN =標頭控件通知
  • NM = er..um .. 「通知的老鼠」?
+0

NM_是非控制類型特定的通用控制通知。我通常將其解析爲「通知消息」。 – peterchen 2008-11-03 15:53:30