Partager via


Prendre en charge des modèles de contrôle dans un fournisseur UI Automation

Cette rubrique montre comment un fournisseur Microsoft UI Automation implémente des modèles de contrôle pour un contrôle. Les modèles de contrôle permettent aux applications clientes de manipuler le contrôle et d’obtenir des informations sur celui-ci.

Un fournisseur implémente un modèle de contrôle en suivant ces étapes main :

  1. Implémentez l’interface du fournisseur qui prend en charge le modèle de contrôle. Par exemple, pour prendre en charge le modèle de contrôle Selection , un fournisseur pour un contrôle de liste personnalisé implémente l’interface ISelectionProvider .
  2. Retourne un objet qui contient l’interface du fournisseur de modèles de contrôle quand UI Automation appelle la méthode IRawElementProviderSimple::GetPatternProvider du fournisseur.

L’exemple suivant montre l’implémentation de l’interface ISelectionProvider pour un contrôle de liste à sélection unique personnalisé. L’implémentation inclut des méthodes de récupération de propriétés pour les propriétés IsSelectionRequired et CanSelectMultiple, ainsi qu’une méthode de récupération du fournisseur pour l’élément de liste sélectionné.

// 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’exemple suivant montre une implémentation de IRawElementProviderSimple::GetPatternProvider qui retourne un objet qui implémente ISelectionProvider. La plupart des contrôles de liste prennent également en charge d’autres modèles, mais cet exemple retourne une référence null pour tous les autres identificateurs de modèle de contrôle.

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

Conceptuel

Vue d'ensemble des modèles de contrôle UI Automation

Rubriques de procédure pour les fournisseurs UI Automation