Sdílet prostřednictvím


CDynamicChain – třída

Tato třída poskytuje metody podporující dynamické řetězení map zpráv.

Důležité

Tuto třídu a její členy nelze použít v aplikacích, které se spouští v prostředí Windows Runtime.

Syntaxe

class CDynamicChain

Členové

Veřejné konstruktory

Název Popis
CDynamicChain::CDynamicChain Konstruktor
CDynamicChain::~CDynamicChain Destruktor.

Veřejné metody

Název Popis
CDynamicChain::CallChain Nasměruje zprávu systému Windows na mapu zpráv jiného objektu.
CDynamicChain::RemoveChainEntry Odebere položku mapy zpráv z kolekce.
CDynamicChain::SetChainEntry Přidá položku mapy zpráv do kolekce nebo upraví existující položku.

Poznámky

CDynamicChain spravuje kolekci map zpráv, což umožňuje směrovat zprávu systému Windows v době běhu na mapu zpráv jiného objektu.

Pokud chcete přidat podporu dynamického řetězení map zpráv, postupujte takto:

  • Odvodit třídu z CDynamicChain. V mapě zpráv zadejte CHAIN_MSG_MAP_DYNAMIC makro, které se má zřetězí s výchozí mapou zpráv jiného objektu.

  • Odvozte všechny třídy, ke které chcete zřetězovat z CMessageMap. CMessageMap umožňuje objektu zpřístupnit mapy zpráv jiným objektům.

  • Volání CDynamicChain::SetChainEntry k určení objektu a mapy zpráv, ke kterému chcete zřetězit.

Předpokládejme například, že vaše třída je definována takto:

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;
   }
};

Klient pak zavolá CMyWindow::SetChainEntry:

myCtl.SetChainEntry(1313, &chainedObj);

kde chainedObj je zřetězený objekt a je instancí třídy odvozené z CMessageMap. Pokud nyní obdrží zprávu, myCtl která není zpracována OnPaint nebo OnSetFocus, procedura okna směruje zprávu na chainedObjvýchozí mapu zpráv.

Další informace o řetězení mapy zpráv naleznete v tématu Mapy zpráv v článku "ATL Window Classes" (Třídy oken ATL).

Požadavky

Hlavička: atlwin.h

CDynamicChain::CallChain

Nasměruje zprávu systému Windows na mapu zpráv jiného objektu.

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

Parametry

dwChainID
[v] Jedinečný identifikátor přidružený ke zřetězenýmu objektu a jeho mapě zpráv.

hWnd
[v] Popisovač okna, ve které se zpráva zobrazuje.

uMsg
[v] Zpráva byla odeslána do okna.

wParam
[v] Další informace specifické pro zprávu

lParam
[v] Další informace specifické pro zprávu

LResult
[ven] Výsledek zpracování zprávy.

Návratová hodnota

TRUE, pokud je zpráva plně zpracována; jinak NEPRAVDA.

Poznámky

Chcete-li CallChainvyvolat proceduru okna , je nutné zadat CHAIN_MSG_MAP_DYNAMIC makro v mapě zpráv. Příklad najdete v přehledu CDynamicChain .

CallChain vyžaduje předchozí volání SetChainEntry k přidružení hodnoty dwChainID k objektu a jeho mapě zprávy.

CDynamicChain::CDynamicChain

Konstruktor

CDynamicChain();

CDynamicChain::~CDynamicChain

Destruktor.

~CDynamicChain();

Poznámky

Uvolní všechny přidělené prostředky.

CDynamicChain::RemoveChainEntry

Odebere zadanou mapu zpráv z kolekce.

BOOL RemoveChainEntry(DWORD dwChainID);

Parametry

dwChainID
[v] Jedinečný identifikátor přidružený ke zřetězenýmu objektu a jeho mapě zpráv. Tuto hodnotu jste původně definovali voláním SetChainEntry.

Návratová hodnota

TRUE, pokud je mapa zpráv úspěšně odebrána z kolekce. V opačném případě FALSE.

CDynamicChain::SetChainEntry

Přidá do kolekce zadanou mapu zpráv.

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

Parametry

dwChainID
[v] Jedinečný identifikátor přidružený ke zřetězenýmu objektu a jeho mapě zpráv.

objekt pObject
[v] Ukazatel na zřetězený objekt deklarující mapu zprávy. Tento objekt musí být odvozen z CMessageMap.

dwMsgMapID
[v] Identifikátor mapy zpráv v zřetězený objekt. Výchozí hodnota je 0, která identifikuje výchozí mapu zpráv deklarovanou pomocí BEGIN_MSG_MAP. Chcete-li zadat alternativní mapu zpráv deklarovanou pomocí ALT_MSG_MAP(msgMapID), předejte msgMapID.

Návratová hodnota

TRUE, pokud je mapa zpráv úspěšně přidána do kolekce. V opačném případě FALSE.

Poznámky

Pokud hodnota dwChainID již v kolekci existuje, její přidružený objekt a mapa zpráv jsou nahrazeny pObject a dwMsgMapID v uvedeném pořadí. V opačném případě se přidá nová položka.

Viz také

CWindowImpl – třída
Přehled třídy