Compartir a través de


CDynamicChain (clase)

Nota:

La biblioteca de plantillas activas (ATL) sigue siendo compatible. Sin embargo, ya no estamos agregando características ni actualizando la documentación.

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 chainedObjde 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.

Consulte también

CWindowImpl (clase)
Información general sobre la clase