Principy zpracování událostí
Všechny zpracování událostí jsou společné třemi kroky. Budete muset:
Implementujte rozhraní událostí na objektu.
Poradit zdroj událostí, že objekt chce přijímat události.
Zdroj událostí unadvise, když objekt už nemusí přijímat události.
Způsob implementace rozhraní událostí bude záviset na jeho typu. Rozhraní událostí může být vtable, duální nebo dispinterface. Je na návrháři zdroje událostí definovat rozhraní; je na vás, abyste toto rozhraní implementovali.
Poznámka:
I když neexistuje žádný technický důvod, že rozhraní událostí nemůže být duální, existuje řada dobrých důvodů návrhu, proč se vyhnout použití duálních. Jedná se ale o rozhodnutí návrháře nebo implementátora zdroje událostí. Vzhledem k tomu, že pracujete z pohledu události sink
, musíte umožnit možnost, že nebudete mít žádnou volbu, ale implementovat duální rozhraní událostí. Další informace o duálních rozhraních naleznete v tématu Duální rozhraní a ATL.
Doporučení zdroje událostí je možné rozdělit do tří kroků:
Zadejte dotaz na zdrojový objekt pro IConnectionPointContainer.
Volání IConnectionPointContainer::FindConnectionPoint předávání IID rozhraní události, které vás zajímá. V případě úspěchu se vrátí rozhraní IConnectionPoint na objektu spojovacího bodu.
Volání IConnectionPoint::Radte předat
IUnknown
jímku události. V případě úspěchu se vrátíDWORD
soubor cookie představující připojení.
Jakmile úspěšně zaregistrujete zájem o příjem událostí, metody v rozhraní událostí objektu budou volána podle událostí aktivovaných zdrojovým objektem. Pokud už nepotřebujete přijímat události, můžete soubor cookie předat zpět do spojovacího bodu přes IConnectionPoint::Unadvise. Tím se přeruší propojení mezi zdrojem a jímkou.
Při zpracování událostí buďte opatrní, abyste se vyhnuli referenčním cyklům.