Элементы управления на базе ActiveX

   
На этом шаге мы дадим краткую характеристику элементов ActiveX .

   
Элемент управления на базе ActiveX - это СОМ-объект, размещенный в контейнере ActiveX-элементов типа
диалогового окна приложения или Web-страницы и выполняющий самостоятельную функцию. Часто
графический интерфейс пользователя состоит из ActiveX-элементов.

   
ActiveX-элемент - это произвольный СОМ-объект, предоставляющий интерфейс IUnknown и находящийся
в саморегистрирующемся СОМ-сервере, который в свою очередь может размещаться в DLL- или ЕХЕ-файле.
Клиент ActiveX-элемента называется контейнером (Container). Элементы управления
ActiveX находятся, или располагаются (sited), в контейнере ActiveX-элементов.
На рисунке 1 показан управляющий элемент Microsoft Chart, находящийся в контейнере ActiveX Control Test Container.


Рис.1. Контейнер ActiveX Control Test Container

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

   
Хотя по определению ActiveX-элементам достаточно поддерживать интерфейс IUnknown, контейнеры могут
предъявлять к ним свои особые требования, например поддержку определенных интерфейсов, без которых взаимодействие невозможно.
Если Вы хотите, чтобы Ваш элемент работал с каким-то особенным контейнером, Вам придется реализовать нужные ему интерфейсы.

   
Большинство популярных контейнеров требуют от элемента управления поддержки некоторого набора данных, генерации событий и
предоставления достаточного для нормальной работы количества интерфейсов. В таблице 1 перечислен минимальный набор интерфейсов,
обязательных для взаимодействия с контейнером ActiveX Control Test Container (а также большинством других
контейнеров пользовательского интерфейса).

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

Таблица 1. Минимальный набор интерфейсов, поддерживаемых ActiveX-элементом

Интерфейс Описание
IOleQbject Необходим для взаимодействия с клиентским местом (site), если оно не организовано
на основе событий. События обрабатываются через интерфейс IConnectionPointContainer (он рассмотрен далее)
IOleInPlaceObject Реализуется в элементах управления, которые могут активизироваться "по месту" и предоставлять собственный пользовательский интерфейс.
Требует поддержки IOleObject
IOleInPlaceActiveObject Необходим только для элементов, предоставляющих пользовательский интерфейс и поддерживающих IOleInPlaceObject
IDataObject Необходим для элементов управления, передающих каким-либо способом данные в контейнер (например через разделяемую память или файл).
IDataObject предоставляет средства для Uniform Data Transfer - СОМ-протокола, устанавливающего правила обмена данными любого вида
FViewObject2 Поддерживается видимыми элементами, которые отображают окно
IDispatch Необходим для элементов управления со специальными методами или свойствами, доступными клиенту через Dispatch::Invoke()
IConnectionPointContainer Необходим для элементов управления, генерирующих события. Этот интерфейс перечисляет клиенту события, которые элемент способен породить
ConnectionPoint Необходим для элементов управления, поддерживающих интерфейс IConnectionPointContainer
IProvideClassInfo Реализован в элементах управления, содержащих библиотеки типов, то есть в большинстве ActiveX-элементов.
Метод GetClassInfo() этого интерфейса предоставляет указатель на конкретную версию ITypeInfo, из которой клиент может извлечь сведения о
типе элемента управления
IPersistStorage Необходим для элементов управления, которые осуществляют сохранение/загрузку в/из предоставляемого контейнером экземпляра IStorage
IClassFactory Создает экземпляр объекта требуемого класса и возвращает указатель на него. Объекту присваивается CLSID, который одновременно
регистрируется в системном реестре
IClassFactory2 To же, что IClassFactory, но с поддержкой лицензирования

   
На следующем шаге мы рассмотрим свойства элементов управления ActiveX.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий