Поддержка шаблонов элементов управления в поставщике модели автоматизации пользовательского интерфейса
В этом разделе показано, как поставщик microsoft модель автоматизации пользовательского интерфейса реализует шаблоны элементов управления для элемента управления. Шаблоны элементов управления позволяют клиентским приложениям управлять элементом управления и получать сведения о нем.
Поставщик реализует шаблон элемента управления, выполнив следующие действия main:
- Реализуйте интерфейс поставщика, поддерживающий шаблон элемента управления. Например, для поддержки шаблона элемента управления Selection поставщик пользовательского элемента управления списком реализует интерфейс ISelectionProvider .
- Возвращает объект , содержащий интерфейс поставщика шаблона элемента управления, когда модель автоматизации пользовательского интерфейса вызывает метод IRawElementProviderSimple::GetPatternProvider поставщика.
В следующем примере показана реализация интерфейса ISelectionProvider для пользовательского элемента управления списком с одним выбором. Реализация включает методы извлечения свойств для свойств IsSelectionRequired и CanSelectMultiple, а также метод для получения поставщика для выбранного элемента списка.
// 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;
}
В следующем примере показана реализация IRawElementProviderSimple::GetPatternProvider , которая возвращает объект, реализующий ISelectionProvider. Большинство элементов управления списками также поддерживают другие шаблоны, но в этом примере возвращается пустая ссылка для всех остальных идентификаторов шаблонов элементов управления.
// 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;
}
Связанные темы
-
Основные понятия
-
Общие сведения о шаблонах элементов управления модели автоматизации пользовательского интерфейса
-
Практические руководства для поставщиков модель автоматизации пользовательского интерфейса