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
yOnPaint
no controla un mensaje, el mensaje se dirige a la asignación de mensajes predeterminada deCMyBaseClass
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 deCMyBaseClass
.Si un procedimiento de ventana usa el segundo mapa de mensajes alternativo de
CMyClass
yOnChar
no controla un mensaje, el mensaje se dirige al mapa de mensajes alternativo especificado enCMyBaseClass
.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
yOnPaint
no controla un mensaje, el mensaje se dirige a la asignación de mensajes predeterminada dem_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 dem_obj
.Si un procedimiento de ventana usa el segundo mapa de mensajes alternativo de
CMyClass
yOnChar
no controla un mensaje, el mensaje se dirige al mapa de mensajes alternativo especificado dem_obj
. La claseCMyContainedClass
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.