Sdílet prostřednictvím


Shrnutí zpracování událostí ATL

Obecně platí, že zpracování událostí modelu COM je poměrně jednoduchý proces. Existují tři hlavní kroky:

  • 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.

Implementace rozhraní

Existují čtyři hlavní způsoby implementace rozhraní pomocí KNIHOVNY ATL.

Odvození od Vhodné pro typ rozhraní Vyžaduje, abyste implementovali všechny metody* Vyžaduje knihovnu typů za běhu.
Rozhraní Tabulka Vtable Yes No
IDispatchImpl Duální Ano Yes
IDispEventImpl Dispinterface No Ano
IDispEventSimpleImpl Dispinterface No Ne

* Při použití tříd podpory ATL se nikdy nepotřebujete k ruční implementaci IUnknown nebo IDispatch metod.

Poradenství a přiřazení zdroje událostí

Existují tři hlavní způsoby, jak doporučovat a nepřidružovat zdroj událostí pomocí knihovny ATL.

Radit funkci Unadvise – funkce Nejvhodnější pro použití s Vyžaduje, abyste sledovali soubor cookie. Komentáře
AtlAdvise, CComPtrBase::Radte AtlUnadvise Virtuální nebo duální rozhraní Ano AtlAdvise je globální funkce ATL. CComPtrBase::Advise používá CComPtr a CComQIPtr.
IDispEventSimpleImpl::D ispEventAdvise IDispEventSimpleImpl::D ispEventUnadvise IDispEventImpl nebo IDispEventSimpleImpl No Méně parametrů než AtlAdvise proto, že základní třída pracuje více.
CComCompositeControl::AdviseSinkMap(TRUE) CComCompositeControl::AdviseSinkMap(FALSE) Ovládací prvky ActiveX ve složených ovládacích prvcích No CComCompositeControl::AdviseSinkMap radí všechny položky v mapě jímky událostí. Stejná funkce unadvises položky. Tato metoda je volána automaticky CComCompositeControl třídou.
CAxDialogImpl::AdviseSinkMap(TRUE) CAxDialogImpl::AdviseSinkMap(FALSE) Ovládací prvky ActiveX v dialogovém okně No CAxDialogImpl::AdviseSinkMap radí a nepřipojí všechny ovládací prvky ActiveX v prostředku dialogového okna. To se provádí automaticky za vás.

Viz také

Zpracování událostí
Podpora IDispEventImpl