Reguły obsługi zdarzeń
Istnieją trzy kroki wspólne dla całej obsługi zdarzeń. Należy wykonać następujące 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ń.
Sposób implementacji interfejsu zdarzeń będzie zależeć od jego typu. Interfejs zdarzenia może być wirtualny, podwójny lub dispinterface. Do projektanta źródła zdarzeń należy zdefiniowanie interfejsu; To ty musisz zaimplementować ten interfejs.
Uwaga
Chociaż nie ma żadnych powodów technicznych, że interfejs zdarzenia nie może być podwójny, istnieje wiele dobrych powodów projektowych, aby uniknąć użycia podwójnych. Jest to jednak decyzja podjęta przez projektanta/implementatora źródła zdarzeń. Ponieważ pracujesz z perspektywy zdarzenia sink
, musisz zezwolić na możliwość, że nie masz żadnego wyboru, ale zaimplementować podwójny interfejs zdarzenia. Aby uzyskać więcej informacji na temat podwójnych interfejsów, zobacz Podwójne interfejsy i ATL.
Porady dotyczące źródła zdarzeń można podzielić na trzy kroki:
Wykonaj zapytanie dotyczące obiektu źródłowego dla elementu IConnectionPointContainer.
Wywołaj metodę IConnectionPointContainer::FindConnectionPoint przekazując identyfikator IID interfejsu zdarzenia, który Cię interesuje. Jeśli to się powiedzie, zwróci interfejs IConnectionPoint w obiekcie punktu połączenia.
Wywołaj metodę IConnectionPoint::Doradzaj przekazanie
IUnknown
ujścia zdarzenia. W przypadku powodzenia zostanie zwróconyDWORD
plik cookie reprezentujący połączenie.
Po pomyślnym zarejestrowaniu zainteresowania odbieraniem zdarzeń metody w interfejsie zdarzeń obiektu będą wywoływane zgodnie ze zdarzeniami wyzwalanym przez obiekt źródłowy. Gdy nie musisz już odbierać zdarzeń, możesz przekazać plik cookie z powrotem do punktu połączenia za pośrednictwem protokołu IConnectionPoint::Unadvise. Spowoduje to przerwanie połączenia między źródłem a ujściem.
Należy zachować ostrożność, aby uniknąć cykli referencyjnych podczas obsługi zdarzeń.