报告列表视图中气球样式工具提示中的词干位置错误

时间:2014-02-16 18:17:34

标签: c++ windows winapi listview tooltip

我想将列表视图控件的工具提示的默认样式更改为气球

我首先调用ListView_GetToolTips()来获取列表视图的工具提示控件的HWND,然后使用GetWindowLongPtr() / SetWindowLongPtr()添加TTS_BALLOON样式

我处理LVN_GETINFOTIP以自定义列表视图中项目(第一列)的工具提示:为第一列项目显示的工具提示文本实际上是第三列文本的副本。其他列(子项)由列表视图自动管理。

第一列项目的气球式工具提示似乎正常;他们的茎被正确定位:

enter image description here

但是第二列的工具提示似乎错误地被错误地,例如绘制气球就好像它被引用到 下面的行中的子项鼠标光标指向的实际行。
在下图中,“星号”表示工具提示出现时鼠标光标所在的位置,但工具提示的茎指向下方的一行,标有椭圆:

enter image description here

奇怪的是,第三列的工具提示似乎正确绘制

这是列表视图控件中的错误吗? (我使用的是Windows 7.)
或者我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

ListView使用跟踪工具提示并将其定位展开并在一个太小的列中显示隐藏文本。它并不期望它的工具提示是一个气球,所以不能弥补它。

您需要对工具提示本身进行子类化,从ListView中查看TTM_TRACKPOSITION条消息,然后调整坐标。

你的第二个问题 - 阴影背景来自系统主题。您应该可以通过在工具提示上调用SetWindowTheme来获取它(我不确定为什么ListView会禁用提示的主题)。