如何强制LVN_HOTTRACK始终触发,即使 CMenu 当前处于打开状态
How to force LVN_HOTTRACK to always fire even when a CMenu is currently open
这是我的场景:
- 我有一个
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
中完成的。
据我了解,菜单窗口(由系统控制的内部弹出窗口(执行鼠标捕获,您的列表不会收到任何与鼠标相关的事件,直到它消失。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 为什么控制台要求输入,即使代码中没有输入
- g++ 说函数不存在,即使包含正确的标头
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 为什么可以将左值传递给"std::async",即使它引用了右值
- muQueue.front() 给出了 const 实例,即使我没有将其标记为 const
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 即使使用调试编译标志,表达式也是"optimized out"
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 这些是什么样的错误?即使我不在 Linux 上工作,我也遇到了 Linux 错误
- Qt:"Q3DScatter"即使包含在内也无法识别
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么文件不是由 F 流创建的,或者即使它是输出只是垃圾值?
- 如何强制LVN_HOTTRACK始终触发,即使 CMenu 当前处于打开状态