【发布时间】:2014-10-10 18:38:55
【问题描述】:
我四处搜索,但没有找到一个对我来说听起来合理或似乎与我的特定问题相关的解决方案(即使在 Stack Overflow 上也是如此)。
问题很简单:我有大部分工作需要在列表视图的任何单元格上进行自定义复选框;我只需要检测悬停/悬停即可绘制热门图像。这些图像被设置为控件的状态图像表,所以我想在悬停和单击时更改子项状态。
我尝试使用NM_HOVER,但在完成所有工作以使其正常工作后,它没有工作。经过进一步研究,似乎只有在LVS_EX_TRACKSELECT 开启时才会发布,这是我不想要的;我只想处理悬停,而不是在悬停时选择!
我研究过使用 NM_HOTTRACK 和 NM_ACTIVATE,但这只能给我一半的答案:我不知道所有项目何时停止悬停(以冷化最后一个热门项目)。
我发现了一些 CodeProject 项目,它使用内部工具提示做一些古怪的事情。我根本不想接触内部数据结构。
我的列表视图是子类。我需要 Common Controls 6。我需要在 XP 或更新版本上运行(尽管将来也可以接受特定于 Vista 的选项)。
我在这里有什么选择吗?谢谢。
【问题讨论】:
-
那么你想用复选框做什么?
-
如果您的列表视图是子类,那么您可以访问您需要的消息 -
WM_MOUSEMOVE。 -
@colepanike:在任何列上实现复选框,而不仅仅是第一个:S
-
@JonathanPotter:嗯,让我们看看...
-
flags字段在LVM_HITTEST或LVM_SUBITEMHITTEST返回时为您设置 - 您无需自己设置。