【发布时间】:2018-06-21 06:46:05
【问题描述】:
这是我的场景:
- 我有一个
CListCtrl,通过使用CMenu::TrackPopupMenu右键单击它会显示一个CMenu。 - 然后,我还有一个事件处理程序
LVN_HOTTRACK,我在其中存储了列表控件的当前项索引,每次鼠标移动都会更新它。 - 接下来,在#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