【问题标题】:MFC Event HandlersMFC 事件处理程序
【发布时间】: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 并进行陷印。我还想在用户选择一个新项目时捕获一个键,例如向上/向下箭头键。谁能告诉我应该为此设置哪些信息?

谢谢

【问题讨论】:

    标签: c++ windows user-interface mfc


    【解决方案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,所以我不会忘记重置它)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多