次の方法で共有


UI オートメーション プロバイダーでのコントロール パターンのサポート

このトピックでは、Microsoft UI オートメーション プロバイダーがコントロールのコントロール パターンを実装する方法について説明します。 コントロール パターンを使用すると、クライアント アプリケーションはコントロールを操作し、それに関する情報を取得できます。

プロバイダーは、次のメイン手順に従ってコントロール パターンを実装します。

  1. コントロール パターンをサポートするプロバイダー インターフェイスを実装します。 たとえば、 Selection コントロール パターンをサポートするために、カスタム リスト コントロールのプロバイダーは ISelectionProvider インターフェイスを実装します。
  2. UI オートメーションがプロバイダーの IRawElementProviderSimple::GetPatternProvider メソッドを呼び出すときに、コントロール パターン プロバイダー インターフェイスを含む オブジェクトを返します。

次の例は、カスタムの単一選択リスト コントロールの ISelectionProvider インターフェイスの実装を示しています。 実装には、IsSelectionRequired プロパティと CanSelectMultiple プロパティのプロパティ取得メソッドと、選択したリスト アイテムのプロバイダーを取得するためのメソッドが含まれています。

// Specifies whether the list control supports the selection of
// multiple items at the same time.
IFACEMETHODIMP ListProvider::get_CanSelectMultiple(BOOL *pRetVal)
{
    *pRetVal = FALSE;
    return S_OK;
} 

// Specifies whether the list must have an item selected at all times.
IFACEMETHODIMP ListProvider::get_IsSelectionRequired(BOOL *pRetVal)
{
   *pRetVal = TRUE;
   return S_OK;
}

// Retrieves the provider of the selected item in a custom list control. 
//
// m_pControl - pointer to an application-defined object for managing
//   the custom list control. 
//
// ListItemProvider - application-defined class that inherits the 
//   IRawElementProviderSimple interface.
//
// GetItemProviderByIndex - application-defined method that retrieves the 
//   IRawElementProviderSimple interface of the selected item.
IFACEMETHODIMP ListProvider::GetSelection(SAFEARRAY** pRetVal)
{
    // Create a safe array to store the IRawElementProviderSimple pointer.
    SAFEARRAY *psa = SafeArrayCreateVector(VT_UNKNOWN, 0, 1);

    // Retrieve the index of the selected list item. 
    int index = m_pControl->GetSelectedIndex(); 

    // Retrieve the IRawElementProviderSimple pointer of the selected list
    // item. ListItemProvider is an application-defined class that 
    // inherits the IRawElementProviderSimple interface. 
    ListItemProvider* pItem = GetItemProviderByIndex(index); 
    if (pItem != NULL)
    {
        LONG i = 0;
        SafeArrayPutElement(psa, &i, pItem);
    }
    *pRetVal = psa;
    return S_OK;
}

次の例は、ISelectionProvider を実装するオブジェクトを返す IRawElementProviderSimple::GetPatternProvider の実装を示しています。 ほとんどのリスト コントロールは他のパターンもサポートしますが、この例では他のすべてのコントロール パターン識別子に対して null 参照を返します。

// Retrieves an object that supports the control pattern provider interface 
// for the specified control pattern. 
IFACEMETHODIMP ListProvider::GetPatternProvider(PATTERNID patternId, IUnknown** pRetVal)
{
    *pRetVal = NULL;
    if (patternId == UIA_SelectionPatternId) 
    {
        // Return the object that implements ISelectionProvider. In this example, 
        // ISelectionProvider is implemented in the current object (this).
        *pRetVal = static_cast<IRawElementProviderSimple*>(this);
        AddRef();  
    }
    return S_OK;
}

概念

UI オートメーション コントロール パターンの概要

UI オートメーション プロバイダーの方法に関するトピック