MFC 事件处理程序
Posted
技术标签:
【中文标题】MFC 事件处理程序【英文标题】:MFC Event Handlers 【发布时间】:2008-11-03 15:20:55 【问题描述】:只是想知道以以下为前缀的MFC控制消息之间的区别是:
LVN (e.g. LVN_ITEMCHANGED)
HDN (e.g. HDN_TRACK)
NM (e.g. NM_HOVER)
此外,当用户使用 NM_CLICK 消息单击项目时,我正在使用 ListControl 并进行陷印。我还想在用户选择一个新项目时捕获一个键,例如向上/向下箭头键。谁能告诉我应该为此设置哪些信息?
谢谢
【问题讨论】:
【参考方案1】: LVN = ListView 通知 HDN = 标头控制通知 NM = er..um..“鼠标通知”?【讨论】:
NM_ 是非特定控件类型的通用控件通知。我通常将其解析为“通知消息”。【参考方案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,所以我不会忘记重置它)
【讨论】:
以上是关于MFC 事件处理程序的主要内容,如果未能解决你的问题,请参考以下文章