Размещение элемента управления ActiveX без окон MSAA
Узнайте, как создать контейнер элементов управления, в котором могут размещаться элементы управления Microsoft ActiveX без окон, реализующие специальные возможности Microsoft Active. Выполнив описанные здесь действия, вы можете убедиться, что все элементы управления microsoft Active Accessibility без окон, размещенные в контейнере элементов управления, доступны клиентским приложениям со специальными возможностями (AT).
Это важно знать
Технологии
Предварительные требования
- C/C++
- Программирование Microsoft Win32 и com-модели
- Элементы ActiveX без окон
- Серверы Microsoft Active Accessibility
Инструкции
Шаг 1. Укажите корневой интерфейс IAccessible от имени элемента управления без окон.
Всякий раз, когда системе требуется указатель IAccessible для корня элемента управления без окна, система запрашивает контейнер элемента управления. Чтобы получить указатель, контейнер вызывает реализацию метода IServiceProvider::QueryService в элементе управления без окон.
Если контейнер элемента управления имеет реализацию Microsoft Active Accessibility, он может вернуть указатель IAccessible элемента управления без окна на систему.
Если контейнер элементов управления имеет реализацию microsoft модель автоматизации пользовательского интерфейса, вызовите функцию UiaProviderFromIAccessible, чтобы получить указатель интерфейса IRawElementProviderSimple, представляющий элемент управления, а затем верните указатель интерфейса IRawElementProviderSimple на систему.
Шаг 2. Ответ на сообщение WM_GETOBJECT от имени элемента управления без окон.
Когда клиентское приложение реагирует на winEvent, вызванное элементом управления без окна, контейнер элемента управления получает WM_GETOBJECT сообщение от имени элемента управления. Сообщение содержит идентификатор объекта элемента управления без окна, который вызвал событие.
Контейнер элемента управления в ответ ищет элемент управления без окна, который является владельцем идентификатора объекта, а затем вызывает метод IAccessibleHandler::AccessibleObjectFromID этого элемента управления. Метод AccessibleObjectFromID возвращает указатель интерфейса IAccessible для элемента пользовательского интерфейса, а контейнер элемента управления возвращает указатель на систему, которая перенаправит его клиентскому приложению.
Шаг 3. Реализация интерфейса IAccessibleWindowlessSite.
Реализуйте метод IAccessibleWindowlessSite::GetParentAccessible .
Когда клиентскому приложению требуются сведения о специальных возможностях родительского корневого поставщика элемента управления без окон, система вызывает метод IAccessible::get_accParent элемента управления без окон. Элемент управления отвечает вызовом метода IAccessibleWindowlessSite::GetParentAccessible контейнера элемента управления, который предоставляет указатель IAccessible родительского элемента управления без окна.
Реализуйте методы IAccessibleWindowlessSite::AcquireObjectIdRange, QueryObjectIdRange и ReleaseObjectIdRange .
Контейнер элементов управления должен поддерживать сопоставление диапазонов идентификаторов объектов с элементами управления без окон. Сопоставление позволяет контейнеру элементов управления определить элемент управления, который должен отвечать на конкретный запрос идентификатора объекта. В следующей таблице показан пример сопоставления диапазонов идентификаторов объектов с элементами управления без окон.
Базовый диапазон Размер диапазона Control 1000 500 Элемент управления 1 1500 1000 Элемент управления 2 2500 2000 Элемент управления 1 Контейнер элементов управления должен поддерживать сопоставление диапазонов идентификаторов объектов с элементами управления без окон для себя и всех дочерних элементов без окон. Диапазоны идентификаторов объектов не обязательно должны быть рядом друг с другом. Кроме того, чтобы избежать атак типа "отказ в обслуживании", контейнер управления может установить ограничения на количество диапазонов, предоставляемых определенному элементу управления. Однако полезно разрешить несколько диапазонов для каждого элемента управления, чтобы элемент управления мог увеличиваться.
Шаг 4. Необязательно. Реализация интерфейса IAccessibleHostingElementProviders.
Реализуйте интерфейс IAccessibleHostingElementProviders, если контейнер элементов управления имеет реализацию сервера Microsoft Active Accessibility и сервер является корнем дерева специальных возможностей, включающего элементы ActiveX без окон, поддерживающие модель автоматизации пользовательского интерфейса. Интерфейс IAccessibleHostingElementProviders имеет один метод GetEmbeddedFragmentRoots, который получает указатели интерфейса IRawElementProviderFragmentRoot для всех модель автоматизации пользовательского интерфейса элементов ActiveX без окон, размещенных в контейнере элементов управления.
Связанные темы