这是我的场景:
- 我有一个
CListCtrl
,我通过使用CMenu::TrackPopupMenu
在右击时显示一个 CMenu。 . - 然后,我还有事件处理程序
LVN_HOTTRACK
,我在其中存储列表控件的当前项目索引,每次鼠标移动都会更新它。 - 接下来,在#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/