Mapy zpráv (ATL)
Mapa zpráv přidruží funkci obslužné rutiny k určité zprávě, příkazu nebo oznámení. Pomocí maker mapy zpráv ATL můžete pro okno zadat mapu zpráv. Postupy okna v CWindowImpl
, CDialogImpl
a CContainedWindowT
nasměrovat zprávy okna na jeho mapu zpráv.
Funkce obslužné rutiny zpráv přijímají další argument typu BOOL&
. Tento argument označuje, zda byla zpráva zpracována, a ve výchozím nastavení je nastavena na HODNOTU TRUE. Funkce obslužné rutiny pak může nastavit argument NA HODNOTU NEPRAVDA, aby indikoval, že nezpracovala zprávu. V takovém případě ATL bude dál hledat funkci obslužné rutiny v mapě zpráv. Nastavením tohoto argumentu na HODNOTU FALSE můžete nejprve provést nějakou akci v reakci na zprávu a pak povolit výchozí zpracování nebo jinou funkci obslužné rutiny dokončit zpracování zprávy.
Zřetězený mapy zpráv
ATL také umožňuje řetězit mapy zpráv, které směrují zpracování zpráv na mapu zpráv definovanou v jiné třídě. Můžete například implementovat běžné zpracování zpráv v samostatné třídě, abyste zajistili jednotné chování pro všechna řetězení oken s danou třídou. Můžete řetězit na základní třídu nebo na datový člen vaší třídy.
ATL také podporuje dynamické řetězení, které umožňuje řetězit mapu zpráv jiného objektu za běhu. Chcete-li implementovat dynamické řetězení, musíte odvodit vaši třídu z CDynamicChain. Potom deklarujte makro CHAIN_MSG_MAP_DYNAMIC v mapě zpráv. CHAIN_MSG_MAP_DYNAMIC vyžaduje jedinečné číslo, které identifikuje objekt a mapu zprávy, ke které zřetězujete. Tuto jedinečnou hodnotu musíte definovat voláním CDynamicChain::SetChainEntry
.
Můžete zřetězovat do jakékoli třídy, která deklaruje mapu zpráv, za předpokladu, že třída je odvozena z CMessageMap. CMessageMap
umožňuje objektu zpřístupnit mapy zpráv jiným objektům. Všimněte si, že CWindowImpl
již odvozuje z CMessageMap
.
Alternativní mapy zpráv
A konečně ATL podporuje alternativní mapy zpráv deklarované pomocí ALT_MSG_MAP makra. Každá alternativní mapa zpráv je identifikována jedinečným číslem, které předáte ALT_MSG_MAP. Pomocí alternativních map zpráv můžete zpracovávat zprávy s více okny v jedné mapě. Všimněte si, CWindowImpl
že ve výchozím nastavení nepoužívá alternativní mapy zpráv. Chcete-li přidat tuto podporu, přepište metodu WindowProc
v CWindowImpl
-odvozené třídě a volání ProcessWindowMessage
pomocí identifikátoru mapy zpráv.