Compartir a través de


Patrones de control compatibles en un proveedor de UI Automation

En este tema se muestra cómo un proveedor de Microsoft Automatización de la interfaz de usuario implementa patrones de control para un control. Los patrones de control permiten a las aplicaciones cliente manipular el control y obtener información sobre él.

Un proveedor implementa un patrón de control siguiendo estos pasos principales:

  1. Implemente la interfaz de proveedor que admite el patrón de control. Por ejemplo, para admitir el patrón de control Selection , un proveedor para un control de lista personalizado implementaría la interfaz ISelectionProvider .
  2. Devuelve un objeto que contiene la interfaz del proveedor de patrones de control cuando Automatización de la interfaz de usuario llama al método IRawElementProviderSimple::GetPatternProvider del proveedor.

En el ejemplo siguiente se muestra la implementación de la interfaz ISelectionProvider para un control de lista de selección única personalizado. La implementación incluye métodos de recuperación de propiedades para las propiedades IsSelectionRequired y CanSelectMultiple, y un método para recuperar el proveedor para el elemento de lista seleccionado.

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

En el ejemplo siguiente se muestra una implementación de IRawElementProviderSimple::GetPatternProvider que devuelve un objeto que implementa ISelectionProvider. La mayoría de los controles de lista también admitirían otros patrones, pero en este ejemplo se devuelve una referencia nula para todos los demás identificadores de patrón de control.

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

Conceptual

Información general acerca de los patrones de control de UI Automation

Temas de procedimientos para proveedores de Automatización de la interfaz de usuario