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 OnSetFocus
aus OnPaint
behandelt wird, leitet die Fensterprozedur die Nachricht an chainedObj
die 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 CallChain
kann, 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 msgMapID
Sie .
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.