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一起使用,因此我不会忘记对其进行重置)