Compatibilidad con patrones de control en un proveedor de automatización de la interfaz de usuario
En este tema se muestra cómo un proveedor de Automatización de la interfaz de usuario de Microsoft 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:
- 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 interfazdeISelectionProvider.
- 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.
En el ejemplo siguiente se muestra la implementación de la interfazISelectionProvider 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;
}
Temas relacionados
-
conceptual de
-
Introducción a los patrones de control de automatización de la interfaz de usuario de
-
Temas de How-To para proveedores de automatización de la interfaz de usuario