Partilhar via


Classe CDynamicChain

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Esta classe fornece métodos que suportam a encadeamento dinâmico de mapas de mensagens.

Importante

Esta classe e os seus membros não podem ser usados em aplicações que sejam executadas no Windows Runtime.

Sintaxe

class CDynamicChain

Membros

Construtores Públicos

Nome Description
CDynamicChain::CDynamicChain O construtor.
CDynamicChain::~CDynamicChain O destruidor.

Métodos Públicos

Nome Description
CDynamicChain::CallChain Direciona uma mensagem do 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.

Observações

CDynamicChain gere uma coleção de mapas de mensagens, permitindo que uma mensagem do Windows seja direcionada, em tempo de execução, 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 o macro CHAIN_MSG_MAP_DYNAMIC a encadear ao mapa de mensagens padrão de outro objeto.

  • Deriva todas as classes para as quais queres encadear a partir do CMessageMap. CMessageMap permite que um objeto expõe os seus mapas de mensagem a outros objetos.

  • Chamada CDynamicChain::SetChainEntry para identificar a que objeto e que mapa de mensagens queres encadear.

Por exemplo, suponha que a sua classe é 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;
   }
};

O cliente chama CMyWindow::SetChainEntryentão :

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 é tratada por OnPaint ou OnSetFocus, o procedimento janela direciona a mensagem para chainedObjo mapa de mensagens predefinido de .

Para mais informações sobre encadeamento de mapas de mensagens, consulte Mapas de Mensagens no artigo "Classes de Janelas ATL."

Requerimentos

Cabeçalho: atlwin.h

CDynamicChain::CallChain

Direciona a mensagem do 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
[dentro] O identificador único associado ao objeto encadeado e ao seu mapa de mensagens.

hWnd
[dentro] A maçaneta da janela que recebia a mensagem.

uMsg
[dentro] A mensagem enviada para a janela.

wParam
[dentro] Informação adicional específica da mensagem.

lParam
[dentro] Informação adicional específica da mensagem.

Resultado
[fora] O resultado do processamento de mensagens.

Valor de retorno

TRUE se a mensagem estiver totalmente processada; caso contrário, FALSO.

Observações

Para que o procedimento de janela invoque CallChain, deve especificar a macro CHAIN_MSG_MAP_DYNAMIC no seu mapa de mensagens. Para um exemplo, veja a visão geral do CDynamicChain .

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

CDynamicChain::CDynamicChain

O construtor.

CDynamicChain();

CDynamicChain::~CDynamicChain

O destruidor.

~CDynamicChain();

Observações

Liberta todos os recursos alocados.

CDynamicChain::RemoveChainEntry

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

BOOL RemoveChainEntry(DWORD dwChainID);

Parâmetros

dwChainID
[dentro] O identificador único associado ao objeto encadeado e ao seu mapa de mensagens. Originalmente, define este valor através de uma chamada ao SetChainEntry.

Valor de retorno

TRUE se o mapa de mensagens for removido com sucesso 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
[dentro] O identificador único associado ao objeto encadeado e ao seu mapa de mensagens.

pObject
[dentro] Um apontador para o objeto encadeado que declara o mapa da mensagem. Este objeto deve derivar do CMessageMap.

dwMsgMapID
[dentro] O identificador do mapa da mensagem no objeto encadeado. O valor predefinido é 0, que identifica o mapa de mensagens por defeito declarado com BEGIN_MSG_MAP. Para especificar um mapa de mensagem alternativo declarado com ALT_MSG_MAP(msgMapID), passe msgMapID.

Valor de retorno

TRUE se o mapa de mensagens for adicionado com sucesso à coleção. Caso contrário, é FALSE.

Observações

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

Consulte também

Classe CWindowImpl
Visão geral da classe