Модель программирования Component Object Model. Разработка COM-сервера, страница 41

Интерфейс

Описание

IDispatch

Поддерживает динамический вызов. Обеспечивает доступ к функциональным возможностям элемента управления (методам и свойствам)

IConnectionPointContainer,

IConnectionPoint,

IEnumConnectionPoints,

IEnumConnections

Обеспечивает единый способ двусторонней связи между объектом и приемником

IViewObject,

IViewObject2,

IViewObjectEx

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

IProvideClassInfo,

IProvideClassInfo2

Используется для доступа к информации о типе coclass и предоставляет информацию о выходном интерфейсе

ISupportErrorInfo

Предоставляет расширенную информацию об ошибках, используя механизм обработки ошибок объектов COM

IPersist,

IPersistPropertyBag,

IPersistStreamInit,

IPersistStorage,

IPersistMemory

Используется для сохранения состояния свойств элемента управления

ISpecifyPropertyPages,

IPerPropertyBrowsing

Указывает на то, что поддерживаются объекты страниц свойств, обеспечивает доступ контейнеру к информации о свойствах

IQuickActivate

Объединяет все необходимые для активизации аргументы и процедуры взаимной настройки за один проход, что повышает быстродействие

IRunableObject

Позволяет контейнеру наблюдать и контролировать состояние объекта в процессе работы приложения

IOleCashe,

IOleCashe2

Управляет кэшированием данных

IOleControl,

IoleObject

Поддерживает работу с клавиатурой и свойства окружения

IOleWindow,

IOlePlaceObject,

IOleInPlaceActiveObject,

IOleInPlaceObjectWindowless,

IdataObject

Позволяют получать сообщения окна, сообщения о нажатии комбинаций клавиш, вызывать справочную систему и реализовывать перетаскивание

События

Использование событий позволяет двум и более объектам COM взаимодействовать друг с другом. Объект COM, генерирующий событие, называется источником события (event source) или связующим объектом (connectable object). Объект COM, получающий извещение о событии, называется получателем события (event sink). Возможны ситуации, когда несколько получателей события получают от источника одно и то же событие. Элемент управления ActiveX выступает в роли источника события при создании запросов и посылке извещений своему контейнеру, который, в этом случае, выступает в роли получателя события. При этом элемент управления должен предоставить этим событиям выходной (outgoing) интерфейс (или интерфейс источника), а в контейнере должен быть реализован объект получателя (sink) этого интерфейса. Для идентификации событий, посылаемых элементом управления, контейнер использует его библиотеку типов.

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

Чтобы механизм событий заработал, источник события должен реализовать интерфейсы IConnectionPointContainer, IConnectionPoint, IEnumConnectionPoints и IEnumConnections. С другой стороны, получатель события должен известить источник о том, что он готов к получению событий. Для этого он, обычно, запрашивает интерфейс IConnectionPointContainer, а затем вызывает функцию FindConnectionPoint для указанного интерфейса IConnectionPoint. Если указанный интерфейс существует, получатель события использует интерфейс IConnectionPoint для вызова метода Advise, передавая ему указатель на собственный интерфейс обратного вызова. Метод Advise возвращает файл cookie, который получатель вернет источнику при вызове метода Unadvise. Метод Unadvise завершает поток событий от конкретной точки соединения.

Свойства

Различают четыре типа свойств элементов управления ActiveX:

¨  Типовые (stock properties) — стандартные свойства, предоставляемые любому элементу управления. Они имеют имена и идентификаторы диспетчеризации, описанные в спецификации элемента управления ActiveX и определенные в файле olectl.h. Примерами типовых свойств являются цвет фона (BackColor), тип рамки (BorderStyle) и отображаемый текст (Caption).