2008-11-03 244 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