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

有一个TTreeView.GetHitTestInfoAt(X, Y: integer): : THitTests函数,但这不是我想要的。它说给定的坐标是对应于标签,图标还是项目的状态图标,但是我需要知道单击了图标的哪一部分。

(原因是我想为每个项目实现带有两个复选框的TreeView节点,并且我使用StateImages模拟复选框(一个状态是选中的项目,另一个状态是未选中的项目)。据我所知单击哪个复选框,我需要将光标坐标与状态图标坐标进行比较。如何获取它们?)

最佳答案

您可以向控件发送 tvm_GetItemRect 消息,该消息将告诉您项目边界框的客户坐标。使用标签名称和图标的相对位置以及所知道的内容来确定在图标中单击鼠标的位置。

您可能更喜欢发送 GetHitTestInfoAt 消息,而不是tvm_HitTest,因为它会立即为您提供 HitTest 信息和项目句柄。句柄是tvm_GetItemRect所需要的。

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

10-06 04:53