Udostępnij za pośrednictwem


Podsumowanie obsługi zdarzeń ATL

Ogólnie rzecz biorąc, obsługa zdarzeń COM jest stosunkowo prostym procesem. Istnieją trzy główne kroki:

  • Zaimplementuj interfejs zdarzenia w obiekcie.

  • Poinformuj źródło zdarzeń, że obiekt chce odbierać zdarzenia.

  • Nienadzoruj źródło zdarzeń, gdy obiekt nie musi już odbierać zdarzeń.

Implementowanie interfejsu

Istnieją cztery główne sposoby implementowania interfejsu przy użyciu atl.

Wyprowadzanie z Odpowiedni dla typu interfejsu Wymaga zaimplementowania wszystkich metod* Wymaga biblioteki typów w czasie wykonywania
Interfejs Tabela wirtualna Tak Nie.
IDispatchImpl Podwójne Tak Tak
IDispEventImpl Dispinterface Nie. Tak
IDispEventSimpleImpl Dispinterface Nie Nie.

* W przypadku używania klas obsługi ATL nigdy nie trzeba implementować IUnknown metod lub IDispatch ręcznie.

Doradzanie i nienadzorowanie źródła zdarzeń

Istnieją trzy główne sposoby doradzania i nienadzorowania źródła zdarzeń przy użyciu atl.

Porada, funkcja Funkcja Unadvise Najbardziej odpowiednie do użytku z Wymaga śledzenia pliku cookie Komentarze
AtlAdvise, CComPtrBase::Advise AtlUnadvise Interfejsy wirtualne lub podwójne Tak AtlAdvise jest globalną funkcją ATL. CComPtrBase::Advise jest używany przez CComPtr i CComQIPtr.
IDispEventSimpleImpl::D ispEventAdvise IDispEventSimpleImpl::D ispEventUnadvise IDispEventImpl lub IDispEventSimpleImpl Nie. Mniejsza liczba parametrów niż AtlAdvise od czasu, gdy klasa bazowa wykonuje więcej pracy.
CComCompositeControl::AdviseSinkMap(TRUE) CComCompositeControl::AdviseSinkMap(FALSE) Kontrolki ActiveX w kontrolkach złożonych Nie. CComCompositeControl::AdviseSinkMap zaleca wszystkie wpisy na mapie ujścia zdarzeń. Ta sama funkcja nie nadzoruje wpisów. Ta metoda jest wywoływana automatycznie przez klasę CComCompositeControl .
CAxDialogImpl::AdviseSinkMap(TRUE) CAxDialogImpl::AdviseSinkMap(FALSE) Kontrolki ActiveX w oknie dialogowym Nie. CAxDialogImpl::AdviseSinkMap Zaleca i nie nadzoruje wszystkich kontrolek ActiveX w zasobie okna dialogowego. Odbywa się to automatycznie.

Zobacz też

Obsługa zdarzeń
Obsługa interfejsu IDispEventImpl