请帮助我获取TTreeNode
中给定TreeView
的状态图标矩形的屏幕坐标(我的意思是TTreeView.StateImages
属性中指定的图标)。
有一个TTreeView.GetHitTestInfoAt(X, Y: integer): : THitTests
函数,但这不是我想要的。它说给定的坐标是对应于标签,图标还是项目的状态图标,但是我需要知道单击了图标的哪一部分。
(原因是我想为每个项目实现带有两个复选框的TreeView
节点,并且我使用StateImages
模拟复选框(一个状态是选中的项目,另一个状态是未选中的项目)。据我所知单击哪个复选框,我需要将光标坐标与状态图标坐标进行比较。如何获取它们?)
最佳答案
您可以向控件发送 tvm_GetItemRect
消息,该消息将告诉您项目边界框的客户坐标。使用标签名称和图标的相对位置以及所知道的内容来确定在图标中单击鼠标的位置。
您可能更喜欢发送 GetHitTestInfoAt
消息,而不是tvm_HitTest
,因为它会立即为您提供 HitTest 信息和项目句柄。句柄是tvm_GetItemRect
所需要的。
您不需要屏幕坐标,因为到目前为止涉及的所有坐标都是客户坐标,但是如果您确实需要屏幕坐标,则可以调用 ClientToScreen
。