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


Сводка по обработке событий ATL

Как правило, обработка событий COM является относительно простым процессом. Существует три основных шага.

  • Реализуйте интерфейс событий в объекте.

  • Сообщите источнику событий, что объект хочет получать события.

  • Отмените источник событий, когда объект больше не должен получать события.

Реализация интерфейса

Существует четыре основных способа реализации интерфейса с помощью ATL.

Производный от Подходит для типа интерфейса Требуется реализовать все методы* Требуется библиотека типов во время выполнения
Интерфейс Vtable Да Нет
IDispatchImpl Двойной Да Да
IDispEventImpl Dispinterface No Да
IDispEventSimpleImpl Dispinterface No No

* При использовании классов поддержки ATL никогда не требуется реализовать IUnknown методы вручную IDispatch .

Консультирование и отмена управления источником событий

Существует три основных способа консультирования и отмены источника событий с помощью ATL.

Советная функция Функция unadvise Наиболее подходящий для использования с Требуется отслеживать файл cookie Комментарии
AtlAdvise, CComPtrBase::Advise AtlUnadvise Виртуальные или двойные интерфейсы Да AtlAdvise — это глобальная функция ATL. CComPtrBase::Adviseиспользуется CComPtr и CComQIPtr.
IDispEventSimpleImpl::D ispEventAdvise IDispEventSimpleImpl::D ispEventUnadvise IDispEventImpl или IDispEventSimpleImpl No Меньше параметров, чем AtlAdvise так как базовый класс делает больше работы.
CComCompositeControl::AdviseSinkMap(TRUE) CComCompositeControl::AdviseSinkMap(FALSE) Элементы ActiveX в составных элементах управления No CComCompositeControl::AdviseSinkMap советует всем записям в карте приемника событий. Та же функция не выполняет ввод записей. Этот метод вызывается автоматически классом CComCompositeControl .
CAxDialogImpl::AdviseSinkMap(TRUE) CAxDialogImpl::AdviseSinkMap(FALSE) Элементы ActiveX в диалоговом окне No CAxDialogImpl::AdviseSinkMap советует и отменяет все элементы ActiveX в ресурсе диалогового окна. Это выполняется автоматически.

См. также

Обработка событий
Поддержка IDispEventImpl