MFC事件处理程序

时间:2008-11-03 15:20:56

标签: c++ windows user-interface mfc

只是想知道前面带有以下内容的MFC控制消息之间的区别是:

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

此外,当用户使用NM_CLICK消息点击某个项目时,我正在使用ListControl和陷印。我还想在用户选择新项目时捕获一个键,例如上/下箭头键。任何人都可以告诉我应该为此捕获哪条消息吗?

由于

2 个答案:

答案 0 :(得分:4)

  • LVN = ListView通知
  • HDN = HeaDer控制通知
  • NM = er..um ..“鼠标通知”?

答案 1 :(得分: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
   }
}

第一个“if”检查“selected”状态是否已更改。请注意,在列表中选择其他项目时,仍然会触发两次:一次取消选择旧项目,一次选择新项目。但是,这对于获取“完全取消选择”是必要的。

此通知经常触发 - 即使您以编程方式修改控件也是如此。如果你的处理程序只对用户事件作出反应,你至少需要一个你设置的标志来进行这些操作(我使用一个类和一个RAII-Lock,所以我不会忘记重置它)