IAccessible::accLocation 方法 (oleacc.h)

IAccessible::accLocation 方法检索指定对象的当前屏幕位置。 所有视觉对象都必须支持此方法。 声音对象不支持此方法。

语法

HRESULT accLocation(
  [out] long    *pxLeft,
  [out] long    *pyTop,
  [out] long    *pcxWidth,
  [out] long    *pcyHeight,
  [in]  VARIANT varChild
);

parameters

[out] pxLeft

类型: long*

以物理屏幕坐标表示的变量的地址,该变量接收对象位置左上角边界的 x 坐标。

[out] pyTop

类型: long*

以物理屏幕坐标表示的变量的地址,该变量接收对象位置左上角边界的 y 坐标。

[out] pcxWidth

类型: long*

地址(以像素为单位)接收对象宽度的变量。

[out] pcyHeight

类型: long*

地址(以像素为单位)接收对象高度的变量。

[in] varChild

类型: VARIANT

指定服务器返回的位置是对象的位置,还是对象的子元素之一的位置。 此参数CHILDID_SELF (获取有关对象) 的信息,或子 ID (获取有关对象子元素的信息) 。 有关初始化 VARIANT 结构的详细信息,请参阅 如何在参数中使用子 ID

返回值

类型: HRESULT

如果成功,则返回 S_OK。 客户端必须始终检查输出参数包含有效值。

如果未成功,则返回下表中的值之一或其他标准 COM 错误代码。 有关详细信息,请参阅 检查 IAccessible 返回值

错误 说明
DISP_E_MEMBERNOTFOUND
对象不支持此方法。
E_INVALIDARG
自变量无效。

注解

此方法检索对象的边框。 如果对象具有非矩形形状,则此方法返回完全包含整个对象区域的最小矩形。 对于非矩形对象,如果使用 IAccessible::accHitTest 进行测试,则对象的边界矩形的坐标可能会失败。 此类非矩形对象的示例是大图标模式下的列表视图项,其中单个项具有一个矩形用于图标,另一个矩形用于图标的文本。 由于 accLocation 返回一个边框,因此该矩形中的所有点并非都在对象的实际边界内。 边界矩形中的某些点可能不在 对象上。 有关详细信息,请参阅 通过命中测试和屏幕位置导航

注意: 此方法返回 width 和 height。 如果需要右侧和底部坐标,请使用右 = 左 + 宽,下 = 顶部 + 高度计算它们。

服务器示例

以下示例演示自定义列表框方法的可能实现,该列表框的列表项是子元素。 对于列表框本身,调用将传递给标准可访问对象,该对象返回窗口的屏幕坐标。

// m_pStdAccessibleObject is the standard accessible object for the control window. 
// m_pControl is the object that represents the control. Its GetItemRect method  
//   retrieves the screen coordinates of the specified item in a zero-based collection. 
// 
HRESULT STDMETHODCALLTYPE AccServer::accLocation( 
    long *pxLeft,
    long *pyTop,
    long *pcxWidth,
    long *pcyHeight,
    VARIANT varChild)
{
    *pxLeft = 0;
    *pyTop = 0;
    *pcxWidth = 0;
    *pcyHeight = 0;
    if (varChild.vt != VT_I4)
    {
        return E_INVALIDARG;
    }
    if (varChild.lVal == CHILDID_SELF)
    {
        return m_pStdAccessibleObject->accLocation(pxLeft, pyTop, pcxWidth, pcyHeight, varChild);
    }
    else
    {
        RECT rect;
        if (m_pControl->GetItemRect(varChild.lVal - 1, &rect) == FALSE)
        {
            return E_INVALIDARG;
        }
        else
        {
            *pxLeft = rect.left;
            *pyTop = rect.top;
            *pcxWidth = rect.right - rect.left;
            *pcyHeight = rect.bottom - rect.top;
            return S_OK;        
        }
    }
};

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 oleacc.h
Library Oleacc.lib
DLL Oleacc.dll
可再发行组件 Windows NT 4.0 SP6 及更高版本和 Windows 95 上的 Active Accessibility 1.3 RDK

请参阅

活动辅助功能和 Windows Vista 屏幕缩放

IAccessible

IAccessible::accHitTest

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

VARIANT