Delphi,TTreeView:如何获取给定节点及其图标的屏幕坐标?

时间:2013-09-01 15:23:19

标签: delphi treeview ttreenodes

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

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

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

1 个答案:

答案 0 :(得分:6)

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

而不是GetHitTestInfoAt,您可能更愿意发送tvm_HitTest消息,因为它会立即为您提供命中测试信息和项目句柄;句柄是tvm_GetItemRect所要求的。

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