Padrões de controle de suporte em um provedor de automação da interface do usuário

Este tópico mostra como um provedor do Microsoft Automação da Interface do Usuário implementa padrões de controle para um controle. Os padrões de controle permitem que os aplicativos cliente manipulem o controle e obtenham informações sobre ele.

Um provedor implementa um padrão de controle seguindo estas etapas main:

  1. Implemente a interface do provedor que dá suporte ao padrão de controle. Por exemplo, para dar suporte ao padrão de controle Seleção , um provedor para um controle de lista personalizado implementaria a interface ISelectionProvider .
  2. Retornar um objeto que contém a interface do provedor de padrões de controle quando Automação da Interface do Usuário chamar o método IRawElementProviderSimple::GetPatternProvider do provedor.

O exemplo a seguir mostra a implementação da interface ISelectionProvider para um controle de lista de seleção única personalizado. A implementação inclui métodos de recuperação de propriedade para as propriedades IsSelectionRequired e CanSelectMultiple e um método para recuperar o provedor para o item de lista selecionado.

// 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;
}

O exemplo a seguir mostra uma implementação de IRawElementProviderSimple::GetPatternProvider que retorna um objeto que implementa ISelectionProvider. A maioria dos controles de lista também daria suporte a outros padrões, mas este exemplo retorna uma referência nula para todos os outros identificadores de padrão de controle.

// 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;
}

Conceitual

Visão Geral de Padrões de Controle de Automação de Interface de Usuário

Tópicos de instruções para provedores de Automação da Interface do Usuário