如何强制LVN_HOTTRACK始终触发,即使 CMenu 当前处于打开状态

How to force LVN_HOTTRACK to always fire even when a CMenu is currently open

本文关键字:CMenu 即使 状态 于打开 LVN 何强制 HOTTRACK      更新时间:2023-10-16

这是我的场景:

  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"。

附加信息: 在打电话之前,我先尝试打电话给SetForegroundWindow()TrackPopupMenu()行为是一样的。

编辑:我的问题是:

我如何让LVN_HOTTRACK始终触发,它不会被菜单打开阻止?

我正在尝试做的是启用/禁用菜单项,即"上移",将所选列表项与其上方的项切换,以及"下移",与下面的列表项切换。

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

如果所选列表项是最顶层的项,则应禁用">

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

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

相关文章: