Compartir a través de


Macros de mapas de mensajes (ATL)

Estas macros definen los mapas de mensajes y las entradas.

Nombre Descripción
ALT_MSG_MAP Marca el principio de un mapa de mensajes alternativo.
BEGIN_MSG_MAP Marca el principio del mapa de mensajes predeterminado.
CHAIN_MSG_MAP_ALT Se encadena a un mapa de mensajes alternativo en la clase base.
CHAIN_MSG_MAP_ALT_MEMBER Se encadena a un mapa de mensajes alternativo en un miembro de datos de la clase.
CHAIN_MSG_MAP Se encadena al mapa de mensajes predeterminado en la clase base.
CHAIN_MSG_MAP_DYNAMIC Se encadena al mapa de mensajes en otra clase en tiempo de ejecución.
CHAIN_MSG_MAP_MEMBER Se encadena al mapa de mensajes predeterminado en un miembro de datos de la clase.
COMMAND_CODE_HANDLER Asigna un mensaje WM_COMMAND a una función de controlador, en función del código de notificación.
COMMAND_HANDLER Asigna un mensaje WM_COMMAND a una función de controlador, según el código de notificación y el identificador del elemento de menú, control o acelerador.
COMMAND_ID_HANDLER Asigna un mensaje WM_COMMAND a una función de controlador, en función del identificador del elemento de menú, control o acelerador.
COMMAND_RANGE_CODE_HANDLER Asigna un mensaje WM_COMMAND a una función de controlador, en función del código de notificación y de un intervalo contiguo de identificadores de control.
COMMAND_RANGE_HANDLER Asigna un mensaje WM_COMMAND a una función de controlador, en función de un intervalo contiguo de identificadores de control.
DECLARE_EMPTY_MSG_MAP Implementa un mapa de mensajes vacío.
DEFAULT_REFLECTION_HANDLER Proporciona un controlador predeterminado para los mensajes reflejados que no se controlan de otro modo.
END_MSG_MAP Marca el final de un mapa de mensajes.
FORWARD_NOTIFICATIONS Reenvía los mensajes de notificación a la ventana primaria.
MESSAGE_HANDLER Asigna un mensaje de Windows a una función de controlador.
MESSAGE_RANGE_HANDLER Asigna un intervalo contiguo de mensajes de Windows a una función de controlador.
NOTIFY_CODE_HANDLER Asigna un mensaje WM_NOTIFY a una función de controlador, en función del código de notificación.
NOTIFY_HANDLER Asigna un mensaje WM_NOTIFY a una función de controlador, según el código de notificación y el identificador de control.
NOTIFY_ID_HANDLER Asigna un mensaje WM_NOTIFY a una función de controlador, en función del identificador de control.
NOTIFY_RANGE_CODE_HANDLER Asigna un mensaje WM_NOTIFY a una función de controlador, según el código de notificación y un intervalo contiguo de identificadores de control.
NOTIFY_RANGE_HANDLER Asigna un mensaje WM_NOTIFY a una función de controlador, en función de un intervalo contiguo de identificadores de control.
REFLECT_NOTIFICATIONS Reflejar los mensajes de notificación de vuelta a la ventana que los envió.
REFLECTED_COMMAND_CODE_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, en función del código de notificación.
REFLECTED_COMMAND_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, según el código de notificación y el identificador del elemento de menú, control o acelerador.
REFLECTED_COMMAND_ID_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, en función del identificador del elemento de menú, control o acelerador.
REFLECTED_COMMAND_RANGE_CODE_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, en función del código de notificación y de un intervalo contiguo de identificadores de control.
REFLECTED_COMMAND_RANGE_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, en función de un intervalo contiguo de identificadores de control.
REFLECTED_NOTIFY_CODE_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, en función del código de notificación.
REFLECTED_NOTIFY_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, según el código de notificación y el identificador de control.
REFLECTED_NOTIFY_ID_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, en función del identificador de control.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, en función del código de notificación y de un intervalo contiguo de identificadores de control.
REFLECTED_NOTIFY_RANGE_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, en función de un intervalo contiguo de identificadores de control.

Requisitos

Encabezado: atlwin.h

ALT_MSG_MAP

Marca el principio de un mapa de mensajes alternativo.

ALT_MSG_MAP(msgMapID)

Parámetros

msgMapID
[in] Identificador del mapa del mensaje.

Comentarios

ATL identifica cada mapa de mensajes con un número. El mapa de mensajes predeterminado (declarado con la macro BEGIN_MSG_MAP) se identifica mediante 0. msgMapID identifica un mapa de mensajes alternativo.

Los mapas de mensajes se usan para procesar los mensajes enviados a una ventana. Por ejemplo, CContainedWindow permite especificar el identificador de un mapa de mensajes en el objeto contenedor. CContainedWindow::WindowProc usa este mapa de mensajes para dirigir los mensajes de la ventana contenida a la función de controlador adecuada o a otro mapa de mensajes. Para obtener una lista de macros que declaran funciones de controlador, consulte BEGIN_MSG_MAP.

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar asignaciones de mensajes alternativas posteriores.

La macro END_MSG_MAP marca el final del mapa de mensajes. Tenga en cuenta que siempre hay exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Ejemplo

En el ejemplo siguiente se muestra el mapa de mensajes predeterminado y un mapa de mensajes alternativo; cada uno contiene una función de controlador:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

En el ejemplo siguiente se muestran dos mapas de mensajes alternativos. El mapa de mensajes predeterminado está vacío.

BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()

Requisitos

Encabezado: atlwin.h

BEGIN_MSG_MAP

Marca el principio del mapa de mensajes predeterminado.

BEGIN_MSG_MAP(theClass)

Parámetros

theClass
[in] Nombre de la clase que contiene el mapa de mensajes.

Comentarios

CWindowImpl::WindowProc usa el mapa de mensajes predeterminado para procesar los mensajes enviados a la ventana. El mapa de mensajes dirige los mensajes a la función de controlador adecuada o a otro mapa de mensajes.

Las macros siguientes asignan un mensaje a una función de controlador. Esta función debe definirse en theClass.

Macro Descripción
MESSAGE_HANDLER Asigna un mensaje de Windows a una función de controlador.
MESSAGE_RANGE_HANDLER Asigna un intervalo contiguo de mensajes de Windows a una función de controlador.
COMMAND_HANDLER Asigna un mensaje WM_COMMAND a una función de controlador, según el código de notificación y el identificador del elemento de menú, control o acelerador.
COMMAND_ID_HANDLER Asigna un mensaje WM_COMMAND a una función de controlador, en función del identificador del elemento de menú, control o acelerador.
COMMAND_CODE_HANDLER Asigna un mensaje WM_COMMAND a una función de controlador, en función del código de notificación.
COMMAND_RANGE_HANDLER Asigna un intervalo contiguo de mensajes WM_COMMAND a una función de controlador, en función del identificador del elemento de menú, control o acelerador.
NOTIFY_HANDLER Asigna un mensaje WM_NOTIFY a una función de controlador, según el código de notificación y el identificador de control.
NOTIFY_ID_HANDLER Asigna un mensaje WM_NOTIFY a una función de controlador, en función del identificador de control.
NOTIFY_CODE_HANDLER Asigna un mensaje WM_NOTIFY a una función de controlador, en función del código de notificación.
NOTIFY_RANGE_HANDLER Asigna un intervalo contiguo de mensajes WM_NOTIFY a una función de controlador, en función del identificador de control.

Las macros siguientes dirigen mensajes a otro mapa de mensajes. Este proceso se denomina "encadenamiento".

Macro Descripción
CHAIN_MSG_MAP Se encadena al mapa de mensajes predeterminado en la clase base.
CHAIN_MSG_MAP_MEMBER Se encadena al mapa de mensajes predeterminado en un miembro de datos de la clase.
CHAIN_MSG_MAP_ALT Se encadena a un mapa de mensajes alternativo en la clase base.
CHAIN_MSG_MAP_ALT_MEMBER Se encadena a un mapa de mensajes alternativo en un miembro de datos de la clase.
CHAIN_MSG_MAP_DYNAMIC Se encadena al mapa de mensajes predeterminado en otra clase en tiempo de ejecución.

Las macros siguientes dirigen mensajes "reflejados" desde la ventana primaria. Por ejemplo, un control normalmente envía mensajes de notificación a su ventana primaria para su procesamiento, pero la ventana primaria puede reflejar el mensaje de vuelta al control.

Macro Descripción
REFLECTED_COMMAND_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, según el código de notificación y el identificador del elemento de menú, control o acelerador.
REFLECTED_COMMAND_ID_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, en función del identificador del elemento de menú, control o acelerador.
REFLECTED_COMMAND_CODE_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, en función del código de notificación.
REFLECTED_COMMAND_RANGE_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, en función de un intervalo contiguo de identificadores de control.
REFLECTED_COMMAND_RANGE_CODE_HANDLER Asigna un mensaje de WM_COMMAND reflejado a una función de controlador, en función del código de notificación y de un intervalo contiguo de identificadores de control.
REFLECTED_NOTIFY_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, según el código de notificación y el identificador de control.
REFLECTED_NOTIFY_ID_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, en función del identificador de control.
REFLECTED_NOTIFY_CODE_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, en función del código de notificación.
REFLECTED_NOTIFY_RANGE_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, en función de un intervalo contiguo de identificadores de control.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER Asigna un mensaje de WM_NOTIFY reflejado a una función de controlador, en función del código de notificación y de un intervalo contiguo de identificadores de control.

Ejemplo

class CMyExtWindow : public CMyBaseWindow
{
public:
   BEGIN_MSG_MAP(CMyExtWindow)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
      CHAIN_MSG_MAP(CMyBaseWindow)
   END_MSG_MAP()

   LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      return 0;   
   }

   LRESULT OnSetFocus(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/) 
   {
      return 0;   
   }
};

Cuando un objeto CMyExtWindow recibe un mensaje WM_PAINT, el mensaje se dirige a CMyExtWindow::OnPaint para el procesamiento real. Si OnPaint indica que el mensaje requiere un procesamiento adicional, el mensaje se dirigirá al mapa de mensajes predeterminado en CMyBaseWindow.

Además del mapa de mensajes predeterminado, puede definir un mapa de mensajes alternativo con ALT_MSG_MAP. Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar asignaciones de mensajes alternativas posteriores. En el ejemplo siguiente se muestra el mapa de mensajes predeterminado y un mapa de mensajes alternativo; cada uno contiene una función de controlador:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

En el ejemplo siguiente se muestran dos mapas de mensajes alternativos. El mapa de mensajes predeterminado está vacío.

BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()

La macro END_MSG_MAP marca el final del mapa de mensajes. Tenga en cuenta que siempre hay exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Requisitos

Encabezado: atlwin.h

CHAIN_MSG_MAP_ALT

Define una entrada en un mapa de mensajes.

CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)

Parámetros

theChainClass
[in] Nombre de la clase base que contiene el mapa de mensajes.

msgMapID
[in] Identificador del mapa del mensaje.

Comentarios

CHAIN_MSG_MAP_ALT dirige los mensajes a un mapa de mensajes alternativo en una clase base. Debe haber declarado este mapa de mensajes alternativo con ALT_MSG_MAP(msgMapID). Para dirigir mensajes al mapa de mensajes predeterminado (declarado con BEGIN_MSG_MAP) de una clase base, use CHAIN_MSG_MAP. Para obtener un ejemplo, consulte CHAIN_MSG_MAP.

Nota:

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar mapas de mensajes alternativos posteriores con ALT_MSG_MAP. La macro END_MSG_MAP marca el final del mapa de mensajes. Cada mapa de mensajes debe tener exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Requisitos

Encabezado: atlwin.h

CHAIN_MSG_MAP_ALT_MEMBER

Define una entrada en un mapa de mensajes.

CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)

Parámetros

theChainMember
[in] Nombre del miembro de datos que contiene el mapa de mensajes.

msgMapID
[in] Identificador del mapa del mensaje.

Comentarios

CHAIN_MSG_MAP_ALT_MEMBER dirige los mensajes a un mapa de mensajes alternativo en un miembro de datos. Debe haber declarado este mapa de mensajes alternativo con ALT_MSG_MAP(msgMapID). Para dirigir mensajes al mapa de mensajes predeterminado (declarado con BEGIN_MSG_MAP) de un miembro de datos, use CHAIN_MSG_MAP_MEMBER. Para obtener un ejemplo, consulte CHAIN_MSG_MAP_MEMBER.

Nota:

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar mapas de mensajes alternativos posteriores con ALT_MSG_MAP. La macro END_MSG_MAP marca el final del mapa de mensajes. Cada mapa de mensajes debe tener exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Requisitos

Encabezado: atlwin.h

CHAIN_MSG_MAP

Define una entrada en un mapa de mensajes.

CHAIN_MSG_MAP(theChainClass)

Parámetros

theChainClass
[in] Nombre de la clase base que contiene el mapa de mensajes.

Comentarios

CHAIN_MSG_MAP dirige mensajes al mapa de mensajes predeterminado (declarado con BEGIN_MSG_MAP) de una clase base. Para dirigir mensajes al mapa de mensajes predeterminado (declarado con ALT_MSG_MAP) de una clase base, use CHAIN_MSG_MAP_ALT.

Nota:

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar mapas de mensajes alternativos posteriores con ALT_MSG_MAP. La macro END_MSG_MAP marca el final del mapa de mensajes. Cada mapa de mensajes debe tener exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Ejemplo

class CMyExtClass : public CMyBaseClass
{
public:
  BEGIN_MSG_MAP(CMyExtClass)
     MESSAGE_HANDLER(WM_PAINT, OnPaint)
     // chain to default message map in CMyBaseClass
     CHAIN_MSG_MAP(CMyBaseClass)
  ALT_MSG_MAP(1)
     // chain to first alternative message map in CMyBaseClass
     CHAIN_MSG_MAP(CMyBaseClass)
  ALT_MSG_MAP(2)
     MESSAGE_HANDLER(WM_CHAR, OnChar)
     // chain to alternate message map in CMyBaseClass
     CHAIN_MSG_MAP_ALT(CMyBaseClass, 1)
  END_MSG_MAP()

   LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      return 0;   
   }

   LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      return 0;   
   }
};

En este ejemplo se muestra lo siguiente:

  • Si un procedimiento de ventana usa el mapa de mensajes predeterminado de CMyClass y OnPaint no controla un mensaje, el mensaje se dirige a la asignación de mensajes predeterminada de CMyBaseClass para su procesamiento.

  • Si un procedimiento de ventana usa el primer mapa de mensajes alternativo en CMyClass, todos los mensajes se dirigen al mapa de mensajes predeterminado de CMyBaseClass.

  • Si un procedimiento de ventana usa el segundo mapa de mensajes alternativo de CMyClass y OnChar no controla un mensaje, el mensaje se dirige al mapa de mensajes alternativo especificado en CMyBaseClass. CMyBaseClass debe haber declarado esta asignación de mensajes con ALT_MSG_MAP(1).

Requisitos

Encabezado: atlwin.h

CHAIN_MSG_MAP_DYNAMIC

Define una entrada en un mapa de mensajes.

CHAIN_MSG_MAP_DYNAMIC(dynaChainID)

Parámetros

dynaChainID
[in] Identificador único del mapa de mensajes de un objeto.

Comentarios

CHAIN_MSG_MAP_DYNAMIC dirige los mensajes, en tiempo de ejecución, al mapa de mensajes predeterminado en otro objeto. El objeto y su mapa de mensajes están asociados a dynaChainID, que se define mediante CDynamicChain::SetChainEntry. Debe derivar la clase de CDynamicChain para poder usar CHAIN_MSG_MAP_DYNAMIC. Para obtener un ejemplo, consulte la introducción a CDynamicChain.

Nota:

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar mapas de mensajes alternativos posteriores con ALT_MSG_MAP. La macro END_MSG_MAP marca el final del mapa de mensajes. Cada mapa de mensajes debe tener exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Requisitos

Encabezado: atlwin.h

CHAIN_MSG_MAP_MEMBER

Define una entrada en un mapa de mensajes.

CHAIN_MSG_MAP_MEMBER(theChainMember)

Parámetros

theChainMember
[in] Nombre del miembro de datos que contiene el mapa de mensajes.

Comentarios

CHAIN_MSG_MAP_MEMBER dirige mensajes al mapa de mensajes predeterminado (declarado con BEGIN_MSG_MAP) de un miembro de datos. Para dirigir mensajes al mapa de mensajes predeterminado (declarado con ALT_MSG_MAP) de un miembro de datos, use CHAIN_MSG_MAP_ALT_MEMBER.

Nota:

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar mapas de mensajes alternativos posteriores con ALT_MSG_MAP. La macro END_MSG_MAP marca el final del mapa de mensajes. Cada mapa de mensajes debe tener exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Ejemplo

class CMyContainerClass : public CWindowImpl<CMyContainerClass>
{
public:
   CMyContainedClass m_obj;

   BEGIN_MSG_MAP(CMyContainerClass)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      // chain to default message map of m_obj
      CHAIN_MSG_MAP_MEMBER(m_obj)
   ALT_MSG_MAP(1)
      // chain to default message map of m_obj
      CHAIN_MSG_MAP_MEMBER(m_obj)
   ALT_MSG_MAP(2)
      MESSAGE_HANDLER(WM_CHAR, OnChar)
      // chain to alternate message map of m_obj
      CHAIN_MSG_MAP_ALT_MEMBER(m_obj, 1)
   END_MSG_MAP()

   LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      return 0;   
   }
   LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      return 0;   
   }
};

En este ejemplo se muestra lo siguiente:

  • Si un procedimiento de ventana usa el mapa de mensajes predeterminado de CMyClass y OnPaint no controla un mensaje, el mensaje se dirige a la asignación de mensajes predeterminada de m_obj para su procesamiento.

  • Si un procedimiento de ventana usa el primer mapa de mensajes alternativo en CMyClass, todos los mensajes se dirigen al mapa de mensajes predeterminado de m_obj.

  • Si un procedimiento de ventana usa el segundo mapa de mensajes alternativo de CMyClass y OnChar no controla un mensaje, el mensaje se dirige al mapa de mensajes alternativo especificado de m_obj. La clase CMyContainedClass debe haber declarado esta asignación de mensajes con ALT_MSG_MAP(1).

Requisitos

Encabezado: atlwin.h

COMMAND_CODE_HANDLER

Similar a COMMAND_HANDLER, pero asigna un mensaje WM_COMMAND basado solo en el código de notificación.

COMMAND_CODE_HANDLER(code, func)

Parámetros

code
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

COMMAND_HANDLER

Define una entrada en un mapa de mensajes.

COMMAND_HANDLER(id, code, func)

Parámetros

id
[in] Identificador del elemento de menú, control o acelerador.

code
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Comentarios

COMMAND_HANDLER asigna un mensaje WM_COMMAND a la función de controlador especificada, en función del código de notificación y del identificador de control. Por ejemplo:

class ATL_NO_VTABLE CPolyProp :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CPolyProp, &CLSID_PolyProp>,
   public IPropertyPageImpl<CPolyProp>,
   public CDialogImpl<CPolyProp>
{
public:
BEGIN_COM_MAP(CPolyProp)
   COM_INTERFACE_ENTRY(IPropertyPage)
END_COM_MAP()

BEGIN_MSG_MAP(CPolyProp)
   COMMAND_HANDLER(IDC_SIDES, EN_CHANGE, OnEnChangeSides)
   CHAIN_MSG_MAP(IPropertyPageImpl<CPolyProp>)
END_MSG_MAP()

   // When a CPolyProp object receives a WM_COMMAND message identified 
   // by IDC_SIDES and EN_CHANGE, the message is directed to 
   // CPolyProp::OnEnChangeSides for the actual processing.
   LRESULT OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, 
      BOOL& /*bHandled*/);

Cualquier función especificada en una macro de COMMAND_HANDLER debe definirse de la siguiente manera:

LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);

El mapa del mensajes establece bHandled en TRUE antes de llamar a CommandHandler. Si CommandHandler no controla completamente el mensaje, debe establecer bHandled en FALSE para indicar que el mensaje necesita un procesamiento adicional.

Nota:

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar mapas de mensajes alternativos posteriores con ALT_MSG_MAP. La macro END_MSG_MAP marca el final del mapa de mensajes. Cada mapa de mensajes debe tener exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Además de COMMAND_HANDLER, puede usar MESSAGE_HANDLER para asignar un mensaje WM_COMMAND sin tener en cuenta un identificador o código. En este caso, MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction) dirigirá todos los mensajes WM_COMMAND a OnHandlerFunction.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Requisitos

Encabezado: atlwin.h

COMMAND_ID_HANDLER

Similar a COMMAND_HANDLER, pero asigna un mensaje WM_COMMAND basado únicamente en el identificador del elemento de menú, el control o el acelerador.

COMMAND_ID_HANDLER(id, func)

Parámetros

id
[in] Identificador del elemento de menú, control o acelerador que envía el mensaje.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

COMMAND_RANGE_CODE_HANDLER

Similar a COMMAND_RANGE_HANDLER, pero asigna mensajes WM_COMMAND con un código de notificación específico de un intervalo de controles a una sola función de controlador.

COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)

Parámetros

idFirst
[in] Marca el principio de un intervalo contiguo de identificadores de control.

idLast
[in] Marca el final de un intervalo contiguo de identificadores de control.

code
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Comentarios

Este intervalo se basa en el identificador del elemento de menú, el control o el acelerador que envía el mensaje.

Requisitos

Encabezado: atlwin.h

COMMAND_RANGE_HANDLER

Similar a COMMAND_HANDLER, pero asigna mensajes WM_COMMAND de un intervalo de controles a una sola función de controlador.

COMMAND_RANGE_HANDLER( idFirst, idLast, func)

Parámetros

idFirst
[in] Marca el principio de un intervalo contiguo de identificadores de control.

idLast
[in] Marca el final de un intervalo contiguo de identificadores de control.

func
[in] Nombre de la función de controlador de mensajes.

Comentarios

Este intervalo se basa en el identificador del elemento de menú, el control o el acelerador que envía el mensaje.

Requisitos

Encabezado: atlwin.h

DECLARE_EMPTY_MSG_MAP

Declara un mapa de mensajes vacío.

DECLARE_EMPTY_MSG_MAP()

Comentarios

DECLARE_EMPTY_MSG_MAP es una macro de conveniencia que llama a las macros BEGIN_MSG_MAP y END_MSG_MAP para crear un mapa de mensajes vacío:

BEGIN_MSG_MAP(CExample)
END_MSG_MAP()

DEFAULT_REFLECTION_HANDLER

Proporciona un controlador predeterminado para la ventana secundaria (control) que recibirá mensajes reflejados; el controlador pasará correctamente mensajes no controlados a DefWindowProc.

DEFAULT_REFLECTION_HANDLER()

Requisitos

Encabezado: atlwin.h

END_MSG_MAP

Marca el final de un mapa de mensajes.

END_MSG_MAP()

Comentarios

Use siempre la macro BEGIN_MSG_MAP para marcar el principio de un mapa de mensajes. Use ALT_MSG_MAP para declarar asignaciones de mensajes alternativas posteriores.

Tenga en cuenta que siempre hay exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Ejemplo

En el ejemplo siguiente se muestra el mapa de mensajes predeterminado y un mapa de mensajes alternativo; cada uno contiene una función de controlador:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

En el ejemplo siguiente se muestran dos mapas de mensajes alternativos. El mapa de mensajes predeterminado está vacío.

BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()

Requisitos

Encabezado: atlwin.h

FORWARD_NOTIFICATIONS

Reenvía los mensajes de notificación a la ventana primaria.

FORWARD_NOTIFICATIONS()

Comentarios

Especifique esta macro como parte del mapa de mensajes.

Requisitos

Encabezado: atlwin.h

MESSAGE_HANDLER

Define una entrada en un mapa de mensajes.

MESSAGE_HANDLER( msg, func )

Parámetros

msg
[in] Mensaje de Windows.

func
[in] Nombre de la función de controlador de mensajes.

Comentarios

MESSAGE_HANDLER asigna un mensaje de Windows a la función de controlador especificada.

Cualquier función especificada en una macro de MESSAGE_HANDLER debe definirse de la siguiente manera:

LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

El mapa del mensajes establece bHandled en TRUE antes de llamar a MessageHandler. Si MessageHandler no controla completamente el mensaje, debe establecer bHandled en FALSE para indicar que el mensaje necesita un procesamiento adicional.

Nota:

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar mapas de mensajes alternativos posteriores con ALT_MSG_MAP. La macro END_MSG_MAP marca el final del mapa de mensajes. Cada mapa de mensajes debe tener exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Además de MESSAGE_HANDLER, puede usar COMMAND_HANDLER y NOTIFY_HANDLER para asignar mensajes WM_COMMAND y WM_NOTIFY, respectivamente.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Ejemplo

class CMyBaseWindow : public CWindowImpl<CMyBaseWindow>
{
public:
   BEGIN_MSG_MAP(CMyBaseWindow)
      MESSAGE_HANDLER(WM_CREATE, OnCreate)
   END_MSG_MAP()

   // When a CMyBaseWindow object receives a WM_CREATE message, the message
   // is directed to CMyBaseWindow::OnCreate for the actual processing.
   LRESULT OnCreate(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      return 0;   
   }
};

Requisitos

Encabezado: atlwin.h

MESSAGE_RANGE_HANDLER

Similar a MESSAGE_HANDLER, pero asigna un intervalo de mensajes de Windows a una sola función de controlador.

MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )

Parámetros

msgFirst
[in] Marca el principio de un intervalo contiguo de mensajes.

msgLast
[in] Marca el final de un intervalo contiguo de mensajes.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

NOTIFY_CODE_HANDLER

Similar a NOTIFY_HANDLER, pero asigna un mensaje WM_NOTIFY basado solo en el código de notificación.

NOTIFY_CODE_HANDLER(cd, func)

Parámetros

cd
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

NOTIFY_HANDLER

Define una entrada en un mapa de mensajes.

NOTIFY_HANDLER( id, cd, func )

Parámetros

id
[in] Identificador del control que envía el mensaje.

cd
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Comentarios

NOTIFY_HANDLER asigna un mensaje WM_NOTIFY a la función de controlador especificada, en función del código de notificación y del identificador de control.

Cualquier función especificada en una macro de NOTIFY_HANDLER debe definirse de la siguiente manera:

LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);

El mapa del mensajes establece bHandled en TRUE antes de llamar a NotifyHandler. Si NotifyHandler no controla completamente el mensaje, debe establecer bHandled en FALSE para indicar que el mensaje necesita un procesamiento adicional.

Nota:

Comience siempre un mapa de mensajes con BEGIN_MSG_MAP. Puede declarar mapas de mensajes alternativos posteriores con ALT_MSG_MAP. La macro END_MSG_MAP marca el final del mapa de mensajes. Cada mapa de mensajes debe tener exactamente una instancia de BEGIN_MSG_MAP y END_MSG_MAP.

Además de NOTIFY_HANDLER, puede usar MESSAGE_HANDLER para asignar un mensaje WM_COMMAND sin tener en cuenta un identificador o código. En este caso, MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction) dirigirá todos los mensajes WM_NOTIFY a OnHandlerFunction.

Para más información sobre el uso de mapas de mensajes en ATL, vea Mapas de mensajes (ATL).

Ejemplo

class CMyDialog2 : public CDialogImpl<CMyDialog2>
{
public:
   enum { IDD = IDD_MYDLG };

   BEGIN_MSG_MAP(CMyDialog2)
      NOTIFY_HANDLER(IDC_TREE1, NM_CLICK, OnNMClickTree1)
   END_MSG_MAP()

public:
   // When a CMyDialog2 object receives a WM_NOTIFY message 
   // identified by IDC_TREE1 and NM_CLICK, the message is 
   // directed to CMyDialog2::OnNMClickTree1 for the actual
   // processing.
   LRESULT OnNMClickTree1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);
};

Requisitos

Encabezado: atlwin.h

NOTIFY_ID_HANDLER

Similar a NOTIFY_HANDLER, pero asigna un mensaje WM_NOTIFY basado solo en el identificador de control.

NOTIFY_ID_HANDLER( id, func )

Parámetros

id
[in] Identificador del control que envía el mensaje.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

NOTIFY_RANGE_CODE_HANDLER

Similar a NOTIFY_RANGE_HANDLER, pero asigna mensajes WM_NOTIFY con un código de notificación específico de un intervalo de controles a una sola función de controlador.

NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

Parámetros

idFirst
[in] Marca el principio de un intervalo contiguo de identificadores de control.

idLast
[in] Marca el final de un intervalo contiguo de identificadores de control.

cd
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Comentarios

Este intervalo se basa en el identificador del control que envía el mensaje.

Requisitos

Encabezado: atlwin.h

NOTIFY_RANGE_HANDLER

Similar a NOTIFY_HANDLER, pero asigna mensajes WM_NOTIFY de un intervalo de controles a una sola función de controlador.

NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

Parámetros

idFirst
[in] Marca el principio de un intervalo contiguo de identificadores de control.

idLast
[in] Marca el final de un intervalo contiguo de identificadores de control.

func
[in] Nombre de la función de controlador de mensajes.

Comentarios

Este intervalo se basa en el identificador del control que envía el mensaje.

Requisitos

Encabezado: atlwin.h

REFLECT_NOTIFICATIONS

Refleja los mensajes de notificación de vuelta a la ventana secundaria (control) que los envió.

REFLECT_NOTIFICATIONS()

Comentarios

Especifique esta macro como parte del mapa de mensajes de la ventana primaria.

Requisitos

Encabezado: atlwin.h

REFLECTED_COMMAND_CODE_HANDLER

Similar a COMMAND_CODE_HANDLER, pero asigna comandos reflejados desde la ventana primaria.

REFLECTED_COMMAND_CODE_HANDLER( code, func )

Parámetros

code
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_COMMAND_HANDLER

Similar a COMMAND_HANDLER, pero asigna comandos reflejados desde la ventana primaria.

REFLECTED_COMMAND_HANDLER( id, code, func )

Parámetros

id
[in] Identificador del elemento de menú, control o acelerador.

code
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_COMMAND_ID_HANDLER

Similar a COMMAND_ID_HANDLER, pero asigna comandos reflejados desde la ventana primaria.

REFLECTED_COMMAND_ID_HANDLER( id, func )

Parámetros

id
[in] Identificador del elemento de menú, control o acelerador.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_COMMAND_RANGE_CODE_HANDLER

Similar a COMMAND_RANGE_CODE_HANDLER, pero asigna comandos reflejados desde la ventana primaria.

REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )

Parámetros

idFirst
[in] Marca el principio de un intervalo contiguo de identificadores de control.

idLast
[in] Marca el final de un intervalo contiguo de identificadores de control.

code
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_COMMAND_RANGE_HANDLER

Similar a COMMAND_RANGE_HANDLER, pero asigna comandos reflejados desde la ventana primaria.

REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )

Parámetros

idFirst
[in] Marca el principio de un intervalo contiguo de identificadores de control.

idLast
[in] Marca el final de un intervalo contiguo de identificadores de control.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_NOTIFY_CODE_HANDLER

Similar a NOTIFY_CODE_HANDLER, pero asigna las notificaciones reflejadas desde la ventana primaria.

REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )

Parámetros

cd
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_NOTIFY_HANDLER

Similar a NOTIFY_HANDLER, pero asigna las notificaciones reflejadas desde la ventana primaria.

REFLECTED_NOTIFY_HANDLER( id, cd, func )

Parámetros

id
[in] Identificador del elemento de menú, control o acelerador.

cd
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_NOTIFY_ID_HANDLER

Similar a NOTIFY_ID_HANDLER, pero asigna las notificaciones reflejadas desde la ventana primaria.

REFLECTED_NOTIFY_ID_HANDLER( id, func )

Parámetros

id
[in] Identificador del elemento de menú, control o acelerador.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_NOTIFY_RANGE_CODE_HANDLER

Similar a NOTIFY_RANGE_CODE_HANDLER, pero asigna las notificaciones reflejadas desde la ventana primaria.

REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

Parámetros

idFirst
[in] Marca el principio de un intervalo contiguo de identificadores de control.

idLast
[in] Marca el final de un intervalo contiguo de identificadores de control.

cd
El código de notificación.

func
[in] Nombre de la función de controlador de mensajes.

Requisitos

Encabezado: atlwin.h

REFLECTED_NOTIFY_RANGE_HANDLER

Similar a NOTIFY_RANGE_HANDLER, pero asigna las notificaciones reflejadas desde la ventana primaria.

REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

Parámetros

idFirst
[in] Marca el principio de un intervalo contiguo de identificadores de control.

idLast
[in] Marca el final de un intervalo contiguo de identificadores de control.

func
[in] Nombre de la función de controlador de mensajes.

Consulte también

Macros