Compartir a través de


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