Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Durante el control de mensajes, la comprobación del mapa de mensajes de una clase no pone fin al trabajo con el mapa de mensajes. ¿Qué ocurre si la clase CMyView
(derivada de CView
) no tiene ninguna entrada coincidente para un mensaje?
Tenga en cuenta que CView
, la clase base de CMyView
, se deriva a su vez de CWnd
. Por lo tanto, CMyView
esCView
y esCWnd
. Cada una de esas clases tiene su propio mapa de mensajes. En la ilustración siguiente se muestra la relación jerárquica de las clases, pero tenga en cuenta que un CMyView
objeto es un único objeto que tiene las características de las tres clases.
Una jerarquía de vistas
Si no se puede hacer coincidir un mensaje en el mapa de mensajes de CMyView
de la clase, el marco también busca en el mapa de mensajes de su clase base inmediata. La BEGIN_MESSAGE_MAP
macro al principio del mapa de mensajes especifica dos nombres de clase como argumentos:
BEGIN_MESSAGE_MAP(CMyView, CView)
El primer argumento denomina la clase a la que pertenece el mapa de mensajes. El segundo argumento proporciona una conexión con la clase base inmediata, en este caso CView
, para que el marco también pueda buscar en su mapa de mensajes.
Por lo tanto, la clase derivada hereda los controladores de mensajes proporcionados en una clase base. Esto es muy similar a las funciones de miembro virtual normales sin necesidad de que todas las funciones miembro del controlador sean virtuales.
Si no se encuentra ningún controlador en ninguno de los mapas de mensajes de clase base, se realiza el procesamiento predeterminado del mensaje. Si el mensaje es un comando, el marco lo enruta al siguiente destino de comando. Si es un mensaje estándar de Windows, el mensaje se pasa al procedimiento de ventana predeterminado adecuado.
Para acelerar la coincidencia de mapa de mensajes, el marco almacena en caché las coincidencias recientes con la probabilidad de que reciba de nuevo el mismo mensaje. Una consecuencia de esto es que el marco procesa mensajes no controladas de forma bastante eficaz. Las tablas de mensajes también son más eficientes en el uso del espacio que las implementaciones que usan funciones virtuales.