Supportare pattern di controllo in un provider di automazione interfaccia utente

Questo argomento illustra come un provider di Automazione interfaccia utente Microsoft implementa i pattern di controllo per un controllo. I pattern di controllo consentono alle applicazioni client di modificare il controllo e di ottenere informazioni su di esso.

Un provider implementa un pattern di controllo seguendo questa procedura principale:

  1. Implementare l'interfaccia del provider che supporta il pattern di controllo. Ad esempio, per supportare il pattern di controllo Selection , un provider per un controllo elenco personalizzato implementerebbe l'interfaccia ISelectionProvider .
  2. Restituisce un oggetto contenente l'interfaccia del provider del pattern di controllo quando Automazione interfaccia utente chiama il metodo IRawElementProviderSimple::GetPatternProvider del provider.

Nell'esempio seguente viene illustrata l'implementazione dell'interfaccia ISelectionProvider per un controllo elenco di selezione singola personalizzato. L'implementazione include i metodi di recupero delle proprietà per le proprietà IsSelectionRequired e CanSelectMultiple e un metodo per il recupero del provider per la voce di elenco selezionata.

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

L'esempio seguente illustra un'implementazione di IRawElementProviderSimple::GetPatternProvider che restituisce un oggetto che implementa ISelectionProvider. La maggior parte dei controlli elenco supporta anche altri modelli, ma in questo esempio viene restituito un riferimento Null per tutti gli altri identificatori del pattern di controllo.

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

Informazioni concettuali

Cenni preliminari sui pattern di controllo per l'automazione interfaccia utente

Procedure per i provider di Automazione interfaccia utente