Classe CDynamicChain

Essa classe fornece métodos que dão suporte ao encadeamento dinâmico de mapas de mensagens.

Importante

Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.

Sintaxe

class CDynamicChain

Membros

Construtores públicos

Nome Descrição
CDynamicChain::CDynamicChain O construtor .
CDynamicChain::~CDynamicChain O destruidor.

Métodos públicos

Nome Descrição
CDynamicChain::CallChain Direciona uma mensagem do Windows para o mapa de mensagens de outro objeto.
CDynamicChain::RemoveChainEntry Remove da coleção uma entrada de mapa de mensagem.
CDynamicChain::SetChainEntry Adiciona uma entrada de mapa de mensagem à coleção ou modifica uma entrada existente.

Comentários

CDynamicChain gerencia uma coleção de mapas de mensagens, permitindo que uma mensagem do Windows seja direcionada, em runtime, para o mapa de mensagens de outro objeto.

Para adicionar suporte ao encadeamento dinâmico de mapas de mensagens, faça o seguinte:

  • Derive sua classe de CDynamicChain. No mapa de mensagens, especifique a macro CHAIN_MSG_MAP_DYNAMIC para encadear com o mapa de mensagens padrão do outro objeto.

  • Derive todas as classes que você deseja encadear de CMessageMap. CMessageMap permite que um objeto exponha seus mapas de mensagem a outros objetos.

  • Chame CDynamicChain::SetChainEntry para identificar o objeto e o mapa de mensagens que você deseja encadear.

Por exemplo, suponhamos que a sua classe seja definida da seguinte maneira:

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

O cliente então chamará CMyWindow::SetChainEntry:

myCtl.SetChainEntry(1313, &chainedObj);

onde chainedObj é o objeto encadeado e é uma instância de uma classe derivada de CMessageMap. Agora, se myCtl receber uma mensagem que não seja tratada por OnPaint ou OnSetFocus, o procedimento de janela direcionará a mensagem para o mapa de mensagens padrão de chainedObj.

Para obter mais informações sobre os mapas de mensagens, confira Mapas de mensagens, no artigo "Classes de janela da ATL".

Requisitos

Cabeçalho: atlwin.h

CDynamicChain::CallChain

Direciona uma mensagem do Windows para o mapa de mensagens do outro objeto.

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

Parâmetros

dwChainID
[in] O identificador exclusivo associado ao objeto encadeado e seu mapa de mensagens.

hWnd
[in] O identificador para a janela que recebe a mensagem.

uMsg
[in] A mensagem enviada para a janela.

wParam
[in] Informações adicionais específicas de mensagem.

lParam
[in] Informações adicionais específicas de mensagem.

lResult
[out] O resultado do processamento de mensagem.

Valor de retorno

TRUE se a mensagem for totalmente processada. Caso contrário, FALSE.

Comentários

Para que o procedimento de janela invoque CallChain, você deve especificar a macro CHAIN_MSG_MAP_DYNAMIC no mapa de mensagens. Para obter um exemplo, confira a visão geral de CDynamicChain.

CallChain requer uma chamada anterior para SetChainEntry a fim de associar o valor dwChainID a um objeto e ao seu mapa de mensagens.

CDynamicChain::CDynamicChain

O construtor .

CDynamicChain();

CDynamicChain::~CDynamicChain

O destruidor.

~CDynamicChain();

Comentários

Libera todos os recursos alocados.

CDynamicChain::RemoveChainEntry

Remove da coleção o mapa de mensagens especificado.

BOOL RemoveChainEntry(DWORD dwChainID);

Parâmetros

dwChainID
[in] O identificador exclusivo associado ao objeto encadeado e seu mapa de mensagens. Originalmente, você define esse valor por meio de uma chamada para SetChainEntry.

Valor de retorno

TRUE se o mapa de mensagens for removido da coleção. Caso contrário, FALSE.

CDynamicChain::SetChainEntry

Adiciona o mapa de mensagens especificado à coleção.

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

Parâmetros

dwChainID
[in] O identificador exclusivo associado ao objeto encadeado e seu mapa de mensagens.

pObject
[in] Um ponteiro para o objeto encadeado declarando o mapa de mensagens. Esse objeto deve derivar de CMessageMap.

dwMsgMapID
[in] O identificador do mapa de mensagens no objeto encadeado. O valor padrão é 0, que identifica o mapa de mensagens padrão declarado com BEGIN_MSG_MAP. Para especificar um mapa de mensagens alternativo declarado com ALT_MSG_MAP(msgMapID), passe msgMapID.

Valor de retorno

TRUE se o mapa de mensagens foi adicionado à coleção. Caso contrário, FALSE.

Comentários

Se o valor dwChainID já existir na coleção, seu objeto associado e o mapa de mensagens serão substituídos por pObject e dwMsgMapID, respectivamente. Caso contrário, uma nova entrada será adicionada.

Confira também

Classe CWindowImpl
Visão geral da aula