IRawElementProviderFragmentRoot::ElementProviderFromPoint 方法 (uiautomationcore.h)

检索位于此片段中指定点的元素的提供程序。

语法

HRESULT ElementProviderFromPoint(
  [in]          double                      x,
  [in]          double                      y,
  [out, retval] IRawElementProviderFragment **pRetVal
);

参数

[in] x

类型: double

水平屏幕坐标。

[in] y

类型: double

垂直屏幕坐标。

[out, retval] pRetVal

类型: IRawElementProviderFragment**

接收指向元素提供程序的指针,该元素位于 (x、y) 或 NULL (如果不存在)。 此参数未经初始化即被传递。

返回值

类型: HRESULT

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

返回的提供程序应对应于将在指定点接收鼠标输入的元素。

如果点位于此元素上,但不在任何子元素上,则返回 NULL 或片段根的提供程序。 如果点位于此片段承载的另一个框架中的元素上,则该方法返回承载该片段的元素 (,如 IRawElementProviderFragment::GetEmbeddedFragmentRoots) 所示。

示例

以下示例演示 HWND 中托管的列表框的实现,该列表框的句柄 m_controlHwnd。 IndexFromY 检索游标位置的列表项的索引,GetItemByIndex 检索该项的UI 自动化提供程序。

HRESULT STDMETHODCALLTYPE ListProvider::ElementProviderFromPoint(double x, double y, IRawElementProviderFragment** pRetVal)
{
    if (pRetVal == NULL) 
    {
        return E_INVALIDARG;
    }
    POINT pt;
    pt.x = (LONG)x;
    pt.y = (LONG)y;
    ScreenToClient(m_controlHwnd, &pt);
    int itemIndex = this->m_pControl->IndexFromY(m_controlHwnd, pt.y);
    ListItemProvider* pItem = GetItemByIndex(itemIndex);  
    if (pItem != NULL)
    {
        *pRetVal = (IRawElementProviderFragment*)pItem;
        pItem->AddRef();
    }
    else 
    {
        pRetVal = (IRawElementProviderFragment*)this;
        pItem->AddRef();
    }

    return S_OK;
}            

要求

要求
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 uiautomationcore.h (包括 UIAutomation.h)

另请参阅

IRawElementProviderFragmentRoot