Meldungszuordnungen (ATL)
Eine Nachrichtenzuordnung ordnet eine Handlerfunktion einer bestimmten Nachricht, einem bestimmten Befehl oder einer bestimmten Benachrichtigung zu. Mithilfe von ATL-Nachrichtenzuordnungsmakros können Sie eine Nachrichtenzuordnung für ein Fenster angeben. Die Fensterprozeduren in CWindowImpl
, CDialogImpl
und CContainedWindowT
leiten die Nachrichten eines Fensters an die Zugehörige Nachrichtenzuordnung weiter.
Die Nachrichtenhandlerfunktionen akzeptieren ein zusätzliches Argument vom Typ BOOL&
. Dieses Argument gibt an, ob eine Nachricht verarbeitet wurde und standardmäßig auf TRUE festgelegt ist. Eine Handlerfunktion kann dann das Argument auf FALSE festlegen, um anzugeben, dass es keine Nachricht behandelt hat. In diesem Fall sucht ATL weiter in der Nachrichtenzuordnung nach einer Handlerfunktion. Wenn Sie dieses Argument auf FALSE festlegen, können Sie zuerst eine Aktion als Reaktion auf eine Nachricht ausführen und dann zulassen, dass die Standardverarbeitung oder eine andere Handlerfunktion die Verarbeitung der Nachricht abschließen kann.
Verkettete Nachrichtenzuordnungen
ATL ermöglicht es Ihnen auch, Nachrichtenzuordnungen zu verketten, die die Nachrichtenverarbeitung auf eine in einer anderen Klasse definierte Nachrichtenzuordnung weiterleiten. Sie können beispielsweise die allgemeine Nachrichtenbehandlung in einer separaten Klasse implementieren, um ein einheitliches Verhalten für alle Fensterverkettungen mit dieser Klasse bereitzustellen. Sie können eine Verketten mit einer Basisklasse oder einem Datenmememm Ihrer Klasse ausführen.
ATL unterstützt auch dynamische Verkettung, sodass Sie zur Laufzeit eine Verkettung mit der Nachrichtenzuordnung eines anderen Objekts durchführen können. Um dynamische Verkettung zu implementieren, müssen Sie Ihre Klasse von CDynamicChain ableiten. Deklarieren Sie dann das CHAIN_MSG_MAP_DYNAMIC Makro in Ihrer Nachrichtenzuordnung. CHAIN_MSG_MAP_DYNAMIC erfordert eine eindeutige Nummer, die das Objekt und die Nachrichtenzuordnung identifiziert, mit der Sie verketten. Sie müssen diesen eindeutigen Wert über einen Aufruf definieren.CDynamicChain::SetChainEntry
Sie können mit jeder Klasse verkettet werden, die eine Nachrichtenzuordnung deklariert, vorausgesetzt, die Klasse wird von CMessageMap abgeleitet. CMessageMap
ermöglicht es einem Objekt, seine Nachrichtenzuordnungen anderen Objekten zur Verfügung zu stellen. Beachten Sie, dass CWindowImpl
bereits von CMessageMap
.
Alternative Nachrichtenzuordnungen
Schließlich unterstützt ATL alternative Nachrichtenzuordnungen, die mit dem ALT_MSG_MAP-Makro deklariert werden. Jede alternative Nachrichtenzuordnung wird durch eine eindeutige Nummer identifiziert, die Sie an ALT_MSG_MAP übergeben. Mithilfe alternativer Nachrichtenzuordnungen können Sie die Nachrichten mehrerer Fenster in einer Karte behandeln. Beachten Sie, CWindowImpl
dass standardmäßig keine alternativen Nachrichtenzuordnungen verwendet werden. Um diese Unterstützung hinzuzufügen, überschreiben Sie die WindowProc
Methode in Ihrer CWindowImpl
abgeleiteten Klasse, und rufen ProcessWindowMessage
Sie sie mit dem Nachrichtenzuordnungsbezeichner auf.