CDynamicChain (clase)
Esta clase proporciona métodos que admiten el encadenamiento dinámico de mapas de mensajes.
Importante
Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.
Sintaxis
class CDynamicChain
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CDynamicChain::CDynamicChain | Constructor . |
CDynamicChain::~CDynamicChain | El destructor . |
Métodos públicos
Nombre | Descripción |
---|---|
CDynamicChain::CallChain | Dirige un mensaje de Windows al mapa de mensajes de otro objeto. |
CDynamicChain::RemoveChainEntry | Quita una entrada de mapa de mensajes de la colección. |
CDynamicChain::SetChainEntry | Agrega una entrada de mapa de mensajes a la colección o modifica una entrada existente. |
Comentarios
CDynamicChain
administra una colección de asignaciones de mensajes, lo que permite dirigir un mensaje de Windows en tiempo de ejecución a otro mapa de mensajes de otro objeto.
Para agregar compatibilidad con el encadenamiento dinámico de asignaciones de mensajes, haga lo siguiente:
Derive la clase de
CDynamicChain
. En el mapa de mensajes, especifique la macro CHAIN_MSG_MAP_DYNAMIC que se va a encadenar a la asignación de mensajes predeterminada de otro objeto.Derive cada clase a la que quiera encadenar desde CMessageMap.
CMessageMap
permite que un objeto exponga sus mapas de mensajes a otros objetos.Llame a
CDynamicChain::SetChainEntry
para identificar a qué objeto y a qué mapa de mensajes desea encadenar.
Por ejemplo, supongamos que la clase se define de la siguiente manera:
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;
}
};
A continuación, el cliente llama a CMyWindow::SetChainEntry
:
myCtl.SetChainEntry(1313, &chainedObj);
donde chainedObj
es el objeto encadenado y es una instancia de una clase derivada de CMessageMap
. Ahora, si myCtl
recibe un mensaje que no se controla mediante OnPaint
o OnSetFocus
, el procedimiento de ventana dirige el mensaje a la asignación chainedObj
de mensajes predeterminada.
Para más información sobre el mapa de mensajes, vea Mapas de mensajes en el artículo "Clases de ventanas ATL".
Requisitos
Encabezado: atlwin.h
CDynamicChain::CallChain
Dirige el mensaje de Windows al mapa de mensajes de otro objeto.
BOOL CallChain(
DWORD dwChainID,
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
LRESULT& lResult);
Parámetros
dwChainID
[in] Identificador único asociado al objeto encadenado y su asignación de mensajes.
hWnd
[in] Identificador de la ventana que recibe el mensaje.
uMsg
[in] Mensaje enviado a la ventana.
wParam
[in] Información adicional específica del mensaje.
lParam
[in] Información adicional específica del mensaje.
lResult
[out] Resultado del procesamiento de mensajes.
Valor devuelto
TRUE si se procesa completamente el mensaje; de lo contrario, FALSE.
Comentarios
Para que el procedimiento de ventana invoque CallChain
, debe especificar la macro CHAIN_MSG_MAP_DYNAMIC en el mapa de mensajes. Para obtener un ejemplo, consulte la introducción a CDynamicChain.
CallChain
requiere una llamada anterior a SetChainEntry para asociar el valor dwChainID con un objeto y su asignación de mensajes.
CDynamicChain::CDynamicChain
Constructor .
CDynamicChain();
CDynamicChain::~CDynamicChain
El destructor .
~CDynamicChain();
Comentarios
Libera todos los recursos asignados.
CDynamicChain::RemoveChainEntry
Quita el mapa mensaje especificado de la colección.
BOOL RemoveChainEntry(DWORD dwChainID);
Parámetros
dwChainID
[in] Identificador único asociado al objeto encadenado y su asignación de mensajes. Este valor se define originalmente a través de una llamada a SetChainEntry.
Valor devuelto
TRUE si el mapa de mensajes se quita correctamente de la colección. De lo contrario, FALSE.
CDynamicChain::SetChainEntry
Agrega el mapa de mensaje especificado a la colección.
BOOL SetChainEntry(
DWORD dwChainID,
CMessageMap* pObject,
DWORD dwMsgMapID = 0);
Parámetros
dwChainID
[in] Identificador único asociado al objeto encadenado y su asignación de mensajes.
pObject
[in] Puntero al objeto encadenado que declara el mapa de mensajes. La clase de este objeto debe derivarse de CMessageMap.
dwMsgMapID
[in] Identificador del mapa de mensajes en el objeto encadenado. El valor predeterminado es 0, que identifica el mapa de mensajes predeterminado declarado con BEGIN_MSG_MAP. Para usar un mapa de mensajes alternativo, declarado con ALT_MSG_MAP(msgMapID) pase msgMapID
.
Valor devuelto
TRUE si el mapa de mensajes se añade correctamente a la colección. De lo contrario, FALSE.
Comentarios
Si el valor dwChainID ya existe en la colección, su objeto asociado y mapa de mensajes se reemplazan por pObject y dwMsgMapID, respectivamente. De lo contrario, se agrega una nueva entrada.