通过命中测试和屏幕位置导航
若要查找对象的子级或确定对象的大小,客户端可以在屏幕上命中测试点。 有两种方法可用:
使用 IAccessible::accHitTest
为了确定某个点是否位于对象内、其子对象中,或者是否位于对象中,客户端调用父对象的 IAccessible::accHitTest 方法,传递要命中测试的点的屏幕坐标。 以下列表描述了一些典型方案:
- 如果对象的子级在指定点重叠, IAccessible::accHitTest 将检索最顶层的子级,该子项在视觉上看起来占据了空间。
- 如果窗口覆盖了子级,或者父级剪裁了子级,则命中测试覆盖点将检索子级,即使它不可见。
- 如果在指定点找到的子对象是可访问的对象,而不是子元素,则 方法将返回子元素的 IDispatch 接口。
使用 IAccessible::accLocation
若要获取对象或对象子项之一的屏幕位置,客户端调用 IAccessible::accLocation。 此方法返回指定对象的边界矩形的坐标。 如果对象的形状不如矩形,该方法将返回包含整个对象的最小矩形的坐标。
下图显示非矩形对象的区域与其边框之间的关系。
注意
IAccessible::accHitTest 比 IAccessible::accLocation 更精确,因为它使客户端能够逐个像素(而不是边界矩形)确定对象的位置。 例如,当应用程序通过跟踪鼠标指针的位置来收集信息时,此精度非常有用。