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.