关于C#:MFC事件处理程序

MFC Event Handlers

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

1
2
3
LVN (e.g. LVN_ITEMCHANGED)
HDN (e.g. HDN_TRACK)
NM (e.g. NM_HOVER)

此外,当用户使用NM_CLICK消息单击某项时,我正在使用ListControl并进行陷印。我还想在用户选择新项目时捕获一个键,例如向上/向下箭头键。谁能告诉我我应该为此捕获哪些消息?

谢谢


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


要更改选择,您需要处理LVN_ITEMCHANGED通知:

1
2
3
4
5
6
7
8
9
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一起使用,因此我不会忘记对其进行重置)