Teilen über


CDynamicChain-Klasse

Diese Klasse stellt Methoden bereit, die die dynamische Verkettung von Nachrichtenzuordnungen unterstützen.

Wichtig

Diese Klasse und ihre Member können nicht in Anwendungen verwendet werden, die in der Windows-Runtime ausgeführt werden.

Syntax

class CDynamicChain

Member

Öffentliche Konstruktoren

Name Beschreibung
CDynamicChain::CDynamicChain Der Konstruktor.
CDynamicChain::~CDynamicChain Der Destruktor.

Öffentliche Methoden

Name Beschreibung
CDynamicChain::CallChain Leitet eine Windows-Nachricht an die Nachrichtenzuordnung eines anderen Objekts weiter.
CDynamicChain::RemoveChainEntry Entfernt einen Nachrichtenzuordnungseintrag aus der Auflistung.
CDynamicChain::SetChainEntry Fügt der Auflistung einen Nachrichtenzuordnungseintrag hinzu oder ändert einen vorhandenen Eintrag.

Hinweise

CDynamicChain verwaltet eine Sammlung von Nachrichtenzuordnungen, sodass eine Windows-Nachricht zur Laufzeit an die Nachrichtenzuordnung eines anderen Objekts weitergeleitet werden kann.

Gehen Sie wie folgt vor, um Unterstützung für die dynamische Verkettung von Nachrichtenzuordnungen hinzuzufügen:

  • Leiten Sie Ihren Kurs von CDynamicChain. Geben Sie in der Nachrichtenzuordnung das CHAIN_MSG_MAP_DYNAMIC Makro an, das mit der Standardnachrichtenzuordnung eines anderen Objekts verkettet werden soll.

  • Leiten Sie jede Klasse ab, die Sie von CMessageMap verketten möchten. CMessageMap ermöglicht es einem Objekt, seine Nachrichtenzuordnungen anderen Objekten zur Verfügung zu stellen.

  • Rufen Sie auf CDynamicChain::SetChainEntry , um zu identifizieren, welches Objekt und welche Nachrichtenzuordnung Sie verketten möchten.

Angenommen, Ihre Klasse ist wie folgt definiert:

class CMyChainWnd : public CWindowImpl<CMyChainWnd>,
   public CDynamicChain
{
public:
   CMyChainWnd() {}

   BEGIN_MSG_MAP(CMyChainWnd)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
      // dynamically chain to the default
      // message map in another object
      CHAIN_MSG_MAP_DYNAMIC(1313)
                // '1313' identifies the object
                // and the message map that will be
                // chained to. '1313' is defined
                // through the SetChainEntry method
   END_MSG_MAP()

   LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // Do some painting code
      return 0;
   }

   LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   { 
      return 0;
   }
};

Der Client ruft dann folgendes auf CMyWindow::SetChainEntry:

myCtl.SetChainEntry(1313, &chainedObj);

dabei chainedObj handelt es sich um das verkettete Objekt und handelt es sich um eine Instanz einer klasse, die von CMessageMap. Wenn myCtl sie nun eine Nachricht empfängt, die nicht von oder OnSetFocusaus OnPaint behandelt wird, leitet die Fensterprozedur die Nachricht an chainedObjdie Standardnachrichtenzuordnung weiter.

Weitere Informationen zur Nachrichtenzuordnungsverkettung finden Sie im Artikel "ATL-Fensterklassen".

Anforderungen

Kopfzeile: atlwin.h

CDynamicChain::CallChain

Leitet die Windows-Nachricht an die Nachrichtenzuordnung eines anderen Objekts weiter.

BOOL CallChain(
    DWORD dwChainID,
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam,
    LRESULT& lResult);

Parameter

dwChainID
[in] Der eindeutige Bezeichner, der dem verketteten Objekt und der zugehörigen Nachrichtenzuordnung zugeordnet ist.

hWnd
[in] Das Handle für das Fenster, das die Nachricht empfängt.

uMsg
[in] Die an das Fenster gesendete Nachricht.

wParam
[in] Zusätzliche nachrichtenspezifische Informationen.

lParam
[in] Zusätzliche nachrichtenspezifische Informationen.

lResult
[out] Das Ergebnis der Nachrichtenverarbeitung.

Rückgabewert

TRUE, wenn die Nachricht vollständig verarbeitet wird; andernfalls FALSE.

Hinweise

Damit die Fensterprozedur aufgerufen werden CallChainkann, müssen Sie das CHAIN_MSG_MAP_DYNAMIC Makro in Der Nachrichtenzuordnung angeben. Ein Beispiel finden Sie in der CDynamicChain-Übersicht .

CallChain erfordert einen vorherigen Aufruf von SetChainEntry , um den dwChainID-Wert einem Objekt und dessen Nachrichtenzuordnung zuzuordnen.

CDynamicChain::CDynamicChain

Der Konstruktor.

CDynamicChain();

CDynamicChain::~CDynamicChain

Der Destruktor.

~CDynamicChain();

Hinweise

Gibt alle zugeordneten Ressourcen frei.

CDynamicChain::RemoveChainEntry

Entfernt die angegebene Nachrichtenzuordnung aus der Auflistung.

BOOL RemoveChainEntry(DWORD dwChainID);

Parameter

dwChainID
[in] Der eindeutige Bezeichner, der dem verketteten Objekt und der zugehörigen Nachrichtenzuordnung zugeordnet ist. Sie definieren diesen Wert ursprünglich über einen Aufruf von SetChainEntry.

Rückgabewert

TRUE, wenn die Nachrichtenzuordnung erfolgreich aus der Auflistung entfernt wird. Andernfalls FALSE.

CDynamicChain::SetChainEntry

Fügt der Auflistung die angegebene Nachrichtenzuordnung hinzu.

BOOL SetChainEntry(
    DWORD dwChainID,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

Parameter

dwChainID
[in] Der eindeutige Bezeichner, der dem verketteten Objekt und der zugehörigen Nachrichtenzuordnung zugeordnet ist.

pObject
[in] Ein Zeiger auf das verkettete Objekt, das die Nachrichtenzuordnung deklariert. Dieses Objekt muss von CMessageMap abgeleitet werden.

dwMsgMapID
[in] Der Bezeichner der Nachrichtenzuordnung im verketteten Objekt. Der Standardwert ist 0, der die standardnachrichtenzuordnung identifiziert, die mit BEGIN_MSG_MAP deklariert wurde. Um eine alternative Nachrichtenzuordnung anzugeben, die mit ALT_MSG_MAP(msgMapID)deklariert wird, übergeben msgMapIDSie .

Rückgabewert

TRUE, wenn die Nachrichtenzuordnung der Auflistung erfolgreich hinzugefügt wird. Andernfalls FALSE.

Hinweise

Wenn der dwChainID-Wert bereits in der Auflistung vorhanden ist, werden das zugeordnete Objekt und die Nachrichtenzuordnung durch pObject und dwMsgMapID ersetzt. Andernfalls wird ein neuer Eintrag hinzugefügt.

Siehe auch

CWindowImpl-Klasse
Klassenübersicht