通过命中测试和屏幕位置导航

若要查找对象的子级或确定对象的大小,客户端可以在屏幕上命中测试点。 有两种方法可用:

使用 IAccessible::accHitTest

为了确定某个点是否位于对象内、其子对象中,或者是否位于对象中,客户端调用父对象的 IAccessible::accHitTest 方法,传递要命中测试的点的屏幕坐标。 以下列表描述了一些典型方案:

  • 如果对象的子级在指定点重叠, IAccessible::accHitTest 将检索最顶层的子级,该子项在视觉上看起来占据了空间。
  • 如果窗口覆盖了子级,或者父级剪裁了子级,则命中测试覆盖点将检索子级,即使它不可见。
  • 如果在指定点找到的子对象是可访问的对象,而不是子元素,则 方法将返回子元素的 IDispatch 接口。

使用 IAccessible::accLocation

若要获取对象或对象子项之一的屏幕位置,客户端调用 IAccessible::accLocation。 此方法返回指定对象的边界矩形的坐标。 如果对象的形状不如矩形,该方法将返回包含整个对象的最小矩形的坐标。

下图显示非矩形对象的区域与其边框之间的关系。

显示非矩形对象区域 (圆) 及其边框的插图。

注意

IAccessible::accHitTestIAccessible::accLocation 更精确,因为它使客户端能够逐个像素(而不是边界矩形)确定对象的位置。 例如,当应用程序通过跟踪鼠标指针的位置来收集信息时,此精度非常有用。