Ambas partes son necesarias para agregar un controlador de mensajes a una clase. El mapa de mensajes debe declararse dentro de su clase, junto con las declaraciones de cualquier función del manejador de mensajes (por ejemplo, OnSize
).
class CClassWnd : public CBaseClassWnd {
...
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP
};
afx_msg
es sólo un marcador de posición vacío macro - no hace nada, pero siempre se incluye por convención.
El mapa de mensajes se define a continuación en el archivo .cpp de la clase:
BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
ON_WM_SIZE()
END_MESSAGE_MAP()
Estas macros generan una tabla de consulta para la clase que permite a los mensajes recibidos por la ventana para ser enviados a las funciones de controlador correspondientes. La macro ON_WM_SIZE
permite que los parámetros de mensaje wParam
y lParam
en el mensaje WM_SIZE
se descodifiquen en valores más significativos para la función del manejador de mensajes (nType
, cx
y cy
en este caso). MFC proporciona macros para la mayoría de los mensajes de ventana (WM_LBUTTONDOWN
, WM_DESTROY
, etc.).
Puede encontrar más información sobre cómo funcionan los mapas de mensajes en MFC here en MSDN.
Es bueno saber que, algo que yo he preguntado por un tiempo. Tal vez tengo demasiado tiempo en mis manos ...;) –