Classe CDynamicChain

Essa classe fornece métodos que suportam o encadeamento dinâmico de mapas de mensagens.

Importante

Essa classe e seus membros não podem ser usados em aplicativos que são 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 Windows para o mapa de mensagens de outro objeto.
CDynamicChain::RemoveChainEntry Remove uma entrada de mapa de mensagem da coleção.
CDynamicChain::SetChainEntry Adiciona uma entrada de mapa de mensagem à coleção ou modifica uma entrada existente.

Comentários

CDynamicChaingerencia uma coleção de mapas de mensagens, permitindo que uma Windows mensagem seja direcionada, em tempo de executar, para o mapa de mensagens de outro objeto.

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

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

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

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

Por exemplo, suponha que sua classe seja definida da seguinte forma:

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

Em seguida, o cliente chama CMyWindow::SetChainEntry:

myCtl.SetChainEntry(1313, &chainedObj);

em chainedObj que é o objeto encadeado e é uma instância de uma classe derivada de CMessageMap. Agora, se myCtl receber uma mensagem que não OnPaint é manipulada pelo ou OnSetFocuspelo , chainedObjo procedimento de janela direcionará a mensagem para o mapa de mensagens padrão da .

Para obter mais informações sobre encadeamento de mapa de mensagens, consulte Mapas mensagem no artigo "Classes de janela da ATL".

Requisitos

Header: atlwin.h

CDynamicChain::CallChain

Direciona a mensagem Windows para o mapa de mensagens de 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 alça para a janela que recebe a mensagem.

Umsg
[in] A mensagem enviada para a janela.

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

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

Lresult
[out] O resultado do processamento da mensagem.

Valor Retornado

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 CHAIN_MSG_MAP_DYNAMIC no mapa de mensagens. Para ver um exemplo, confira a Visão geral de CDynamicChain .

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

CDynamicChain::CDynamicChain

O construtor.

CDynamicChain();

CDynamicChain::~CDynamicChain

O destruidor.

~CDynamicChain();

Comentários

Libera todos os recursos alocados.

CDynamicChain::RemoveChainEntry

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

BOOL RemoveChainEntry(DWORD dwChainID);

Parâmetros

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

Valor Retornado

TRUE se o mapa de mensagens for removido com êxito 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 da mensagem. 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 Retornado

TRUE se o mapa de mensagens for adicionado com êxito à 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 classe