请帮助我获取TTreeNode
中给定TreeView
的状态图标矩形的屏幕坐标(我的意思是TTreeView.StateImages
属性中指定的图标)。
有一个TTreeView.GetHitTestInfoAt(X, Y: integer): : THitTests
功能,但这并不是我想要的;它表示给定的坐标是对应于标签,图标还是项目的状态图标,但我需要知道图标的哪个部分被点击。
(原因是我想为每个项目实现TreeView
节点和两个复选框,我使用StateImages
来模拟复选框(一个状态是一个选中的项目,另一个状态是一个未经检查的项目。据我了解,要知道点击了哪个复选框,我需要将光标坐标与状态图标坐标进行比较。我怎样才能得到它们?)
答案 0 :(得分:6)
您可以向控件发送tvm_GetItemRect
消息,该消息将告诉您项目边界框的客户端坐标。使用它以及您对标签文本和图标的相对位置的了解,以确定在图标中单击鼠标的位置。
而不是GetHitTestInfoAt
,您可能更愿意发送tvm_HitTest
消息,因为它会立即为您提供命中测试信息和项目句柄;句柄是tvm_GetItemRect
所要求的。
您不需要屏幕坐标,因为到目前为止所涉及的所有坐标都是客户端坐标,但如果您真的需要屏幕坐标,则可以调用ClientToScreen
。