次の方法で共有


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 によって示されます)。

次の例は、ハンドルがm_controlHwndされている HWND でホストされているリスト ボックスの実装を示しています。 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