ATL Event Handling Summary
В общем случае обработка событий модели COM относительно простой процесс. 3 Основных этапов:
Реализуйте интерфейс события в объекте.
Источник события посоветуйте, что объект хочет получать события.
Unadvise источник события, когда конкретному объекту больше не нужно получать события.
Реализация интерфейса
4 Основных способа реализации интерфейса с использованием библиотеки ATL.
Является производным от |
Пригодный для типа интерфейса |
Необходимо реализовать все methods* |
Требует наличия библиотеки типов во время выполнения |
---|---|---|---|
Интерфейс |
Vtable |
Да |
Нет |
Сдвоенный |
Да |
Да |
|
Диспетчерский интерфейс |
Нет |
Да |
|
Диспетчерский интерфейс |
Нет |
Нет |
* При использовании классов поддержки библиотеки ATL, никогда не требуется реализовать методы IUnknown или IDispatch вручную.
Advise и Unadvising источник события
3 Основных способа advise и unadvising источник событий с использованием библиотеки ATL.
Посоветуйте функции |
Функция Unadvise |
Наиболее подходящий для использования с |
Необходимо хранить отслеживание cookie? |
Комментарии |
---|---|---|---|---|
Vtable или двойные интерфейсы |
Да |
AtlAdvise глобальной функции библиотеки ATL. CComPtrBase::Advise используется CComPtr и CComQIPtr. |
||
Нет |
Чем меньше параметров AtlAdvise поскольку базовый класс выполняет дополнительную работу. |
|||
Элементы управления ActiveX в нескольких элементах управления |
Нет |
CComCompositeControl::AdviseSinkMap советует всему сопоставлению приемников записей в случае. Эти же unadvises функции записи. Этот метод вызывается классом CComCompositeControl автоматически. |
||
Элементы управления ActiveX в диалоговом окне |
Нет |
CAxDialogImpl::AdviseSinkMap советует и unadvises все элементы управления ActiveX в ресурс диалогового окна. Это выполняется автоматически. |