如何检测鼠标是否在列表视图控件中的项目/子项目上?

时间:2014-08-17 20:24:50

标签: c listview winapi

我已经四处寻找并且没有找到对我来说听起来合理或者与我的具体问题相关的解决方案(即使在Stack Overflow上也是如此)。

问题很简单:我有大部分工作需要在列表视图的任何单元格上执行自定义复选框;我只需要检测悬停在/悬停以绘制热图像。这些图像被设置为控件的状态图像表,因此我想在悬停和点击时更改子项状态。

我尝试使用NM_HOVER,但在完成所有工作以使其工作后,它无效。经过进一步的研究,似乎只有在LVS_EX_TRACKSELECT开启时才会发出,这是我不想要的;我只是想处理悬停,而不是选择悬停!

我研究过使用NM_HOTTRACKNM_ACTIVATE,但这只会给我一半答案:我不知道所有物品什么时候停止徘徊(冷至最后一个热门项目)

我找到了一些CodeProject项目,它使用内部工具提示做了一些古怪的事情。我根本不想触及内部数据结构。

我的列表视图是子类。我需要通用控件6.我需要在XP或更新版本上运行(虽然特定于Vista的选项也可以在将来使用)。

我有什么选择吗?感谢。

1 个答案:

答案 0 :(得分:2)

由于您具有listview子类,因此您可以查看WM_MOUSEMOVE消息以检测鼠标在控件上移动。

根据您的要求,您可能还希望在鼠标离开窗口时使用TrackMouseEvent来捕获。