【问题标题】:How to force LVN_HOTTRACK to always fire even when a CMenu is currently open即使当前打开 CMenu,如何强制 LVN_HOTTRACK 始终触发
【发布时间】:2018-06-21 06:46:05
【问题描述】:

这是我的场景:

  1. 我有一个CListCtrl,通过使用CMenu::TrackPopupMenu 右键单击​​它会显示一个CMenu。
  2. 然后,我还有一个事件处理程序LVN_HOTTRACK,我在其中存储了列表控件的当前项索引,每次鼠标移动都会更新它。
  3. 接下来,在#1 中提到的CMenu 的菜单项上,我有UPDATE_COMMAND_UI 事件处理程序,我在其中检查一些条件,然后启用/禁用相应的菜单项。

现在,LVN_HOTTRACK 可以正常工作,CMenu 显示/打开时除外。我通过在UPDATE_COMMAND_UI 上将标题栏更新为“0”来测试这一点,而我在LVN_HOTTRACK 期间将其设置为“1”,并注意到无论我在菜单打开时移动鼠标多少次,它都不会更新为“1”。

附加信息: 我尝试在调用TrackPopupMenu() 之前先调用SetForegroundWindow(),并且行为是相同的。

编辑:
我的问题是:
我如何让LVN_HOTTRACK 触发总是,它不会被打开的菜单阻止?

我想要做的是启用/禁用菜单项,即“上移”,它将选定的列表项与它上面的项目切换,以及“下移”,它与下面的列表项切换。

客户的要求是我应该有一个上下文/右键菜单,并且没有按钮来切换项目。

如果选定的列表项是最顶部的项,则应禁用“上移”,如果选定的列表项是最底部的项,则应禁用“下移”。据我了解,启用/禁用这些菜单项是在 UPDATE_COMMAND_UI 中完成的。

【问题讨论】:

  • 菜单打开时为什么需要热跟踪?
  • Windows 资源管理器也会在菜单打开时停止热跟踪。
  • 呃,你有什么问题?
  • @IInspectable 我想他想知道为什么在弹出菜单打开时会暂停热跟踪。
  • @Jabberwocky:我猜大概有一百个不同的问题,OP 可能想问。关键是,Stack Overflow 上的问题不应该让我们猜测。如果您想提问,请务必提问。

标签: c++ visual-studio-2010 winapi mfc clistctrl


【解决方案1】:

据我了解,菜单窗口(由系统控制的内部弹出窗口)执行鼠标捕获,在该事件消失之前,您的列表不会接收任何与鼠标相关的事件。

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 2011-08-25
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多