c++ - 即使 CMenu 当前打开,如何强制 LVN_HOTTRACK 始终触发

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

这是我的场景:

  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 中完成的。

最佳答案

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

关于c++ - 即使 CMenu 当前打开,如何强制 LVN_HOTTRACK 始终触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50962029/

相关文章:

c++ - 为什么不消除关于此结构的填充字节的需要?

c++ - IDC 是什么意思?

c++ - 折叠 TreeView 中的所有节点,最后展开的节点除外

c++ - 如何使用 NVidia GPU 在 Windows 下逐步调试 OpenCL GPU 应用程序

c# - 如何将自定义控件添加到工具箱?

java - Java中有自动类型推断吗?

c++ - 矩形图像可以用于opencv haar训练吗

c - 如何从资源中在 PictureBox 上显示图像?

c++ - 多重继承和unique_ptr销毁

c++ - 将拷贝分配给指针