8

请帮我获取a中给定的状态图标矩形的屏幕坐标TTreeNodeTreeView我的意思是TTreeView.StateImages属性中指定的图标)。

有一个TTreeView.GetHitTestInfoAt(X, Y: integer): : THitTests功能,但这不是我想要的;它表示给定坐标是否对应于标签、图标或项目的状态图标,但我需要知道点击了图标的哪一部分。

(原因是我想TreeView为每个项目实现两个复选框的节点,并且我StateImages用来模拟复选框(一个状态是选中的项目,另一个状态是未选中的项目)。据我所知,要知道哪个单击复选框我需要将光标坐标与状态图标坐标进行比较。我怎样才能得到它们?)

4

1 回答 1

7

您可以向控件发送一条tvm_GetItemRect消息,该消息将告诉您项目边界框的客户端坐标。使用它以及您对标签文本和图标的相对位置的了解来确定鼠标在图标中的单击位置。

而不是GetHitTestInfoAt,您可能更喜欢发送tvm_HitTest消息,因为它会立即为您提供命中测试信息和项目句柄;需要一个手柄tvm_GetItemRect

您不需要屏幕坐标,因为到目前为止所涉及的所有坐标都是客户端坐标,但ClientToScreen如果您真的需要屏幕坐标,您可以调用。

于 2013-09-01T15:42:36.293 回答