Поделиться через


Поддержка шаблонов элементов управления в поставщике автоматизации пользовательского интерфейса

В этом разделе показано, как поставщик автоматизации пользовательского интерфейса Майкрософт реализует шаблоны элементов управления для элемента управления. Шаблоны элементов управления позволяют клиентским приложениям управлять элементом управления и получать сведения об этом.

Поставщик реализует шаблон элемента управления, выполнив следующие основные действия:

  1. Реализуйте интерфейс поставщика, поддерживающий шаблон элемента управления. Например, для поддержки шаблона элемента управления выбора поставщик пользовательского элемента управления списка реализует интерфейс ISelectionProvider.
  2. Возвращает объект, содержащий интерфейс поставщика шаблонов управления, когда служба автоматизации пользовательского интерфейса вызывает метод поставщика 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;
}

концептуальные

Обзор шаблонов элементов управления автоматизации пользовательского интерфейса

разделы How-To для поставщиков автоматизации пользовательского интерфейса