TN024: Mensajes definidos por el MFC y recursos

Esta nota describe los mensajes internos de Windows y formatos de recursos utilizados por MFC. Esta información explica la aplicación del marco y le ayudará a depurar la aplicación. Para los aventureros, a pesar de toda esta información no es oficialmente compatible, puede utilizar esta información para implementaciones avanzadas.

Esta nota contiene detalles de la implementación privada de MFC; todos los contenidos están sujetos a cambios en el futuro. Mensajes privados de Windows MFC tienen un significado en el ámbito de una aplicación sólo pero cambiarán en el futuro para contener mensajes de todo el sistema.

Los mensajes de Windows privados de rango de MFC y tipos de recursos están en el rango de "sistema" reservados retirados por Microsoft Windows. Se utilizan en la actualidad no todos los números de los rangos, y en el futuro, podrán utilizarse los nuevos números en el rango. Pueden cambiar los números utilizados actualmente.

MFC privada Windows mensajes están en el ran&go 0x360-gt; 0x37F.

Recursos privados de MFC tipos están en el ran&go 0xF0-gt; 0xFF.

Mensajes de Windows privados de MFC

Estos mensajes de Windows se utilizan en lugar de funciones virtuales de C++ cuando se requiera relativamente flojo acoplamiento entre objetos de ventana y donde una función virtual de C++ no sería apropiada.

Estas estructuras de parámetros asociados y mensajes privados de Windows se declaran en el encabezado MFC privado ' AFXPRIV.H'. Se advirtió que cualquier código que incluye este encabezado puede ser depender comportamiento indocumentado y voluntad probable ruptura en el futuro las versiones de MFC.

En el caso poco probable de que necesitan manejar uno de estos mensajes, debe utilizar la macro de mapa de mensajes ON_MESSAGE y manejar el mensaje en el formato genérico de LRESULT, WPARAM/LPARAM.

WM_QUERYAFXWNDPROC

Este mensaje se envía a una ventana que se está creando. Esto es enviado muy temprano en el proceso de creación como un método para determinar si el WndProc es AfxWndProc. AfxWndProc devuelve 1.

wParam No se utilizan
lParam No se utilizan
devuelve 1 si procesados por AfxWndProc

WM_SIZEPARENT

Este mensaje es enviado por una ventana de marco a sus hijos inmediatas durante la redimensión (CFrameWnd::OnSize llamadas CFrameWnd::RecalcLayout que se llama CWnd::RepositionBars) para cambiar la posición de las barras de control alrededor del lado del marco. La estructura AFX_SIZEPARENTPARAMS contiene el rectángulo cliente disponible actual del padre y un HDWP (que puede ser NULL) con el que llamar a DeferWindowPos para minimizar el repintado.

wParam No se utilizan
lParam Dirección de una estructura AFX_SIZEPARENTPARAMS
devuelve No usa (0)

Ignorando el mensaje indica que la ventana no participar en el diseño.

WM_SETMESSAGESTRING

Este mensaje se envía a una ventana de marco para que actualizar la línea del mensaje en la barra de Estado. Se puede especificar un ID de cadena o un LPCSTR (pero no ambas).

wParam String ID (o cero)
lParam LPCSTR la cadena (o NULL)
devuelve No usa (0)

WM_IDLEUPDATECMDUI

Este mensaje se envía en tiempo de inactividad para implementar la actualización de tiempo inactivo de controladores de interfaz de usuario de comando de actualización. Si la ventana (normalmente una barra de control) controla el mensaje, se crea un objeto CCmdUI (o un objeto de una clase derivada) y llame a CCmdUI::DoUpdate para cada uno de los "elementos" en la ventana. Esto a su vez buscará un controlador de ON_UPDATE_COMMAND_UI para los objetos de la cadena de comando-controlador.

wParam BOOL bDisableIfNoHandler
lParam No usa (0)
devuelve No usa (0)

bDisableIfNoHandler es distinto de cero para deshabilitar el objeto UI si existe un ON_UPDATE_COMMAND_UI ni un controlador de ON_COMMAND.

WM_EXITHELPMODE

Este mensaje se envía a un CFrameWnd que, para salir sensible al contexto, modo de ayuda. La recepción de este mensaje termina el bucle modal iniciado por CFrameWnd::OnContextHelp.

wParam No usa (0)
lParam No usa (0)
devuelve No se utilizan

WM_INITIALUPDATE

Este mensaje se envía por la plantilla de documento a todos los descendientes de una ventana de marco cuando es seguro para ellos hacer su actualización inicial. Se asigna a una llamada a CView::OnInitialUpdate , pero puede utilizarse en otros CWnd-clases de otra actualización One-Shot derivadas.

wParam No usa (0)
lParam No usa (0)
devuelve No usa (0)

WM_RECALCPARENT

Este mensaje es enviado por una vista a su ventana primaria (obtenida mediante GetParent) para forzar un nuevo cálculo de diseño (normalmente, el padre llamará a RecalcLayout). Esto se utiliza en aplicaciones de servidor OLE donde es necesario para el marco crecer en tamaño a medida que crece el tamaño total de la vista.

Si la ventana primaria procesa este mensaje debe devolver TRUE y llenar el RECT pasado lParam con el nuevo tamaño del área cliente. Se utiliza en CScrollView para manejar adecuadamente las barras de desplazamiento (lugar entonces en la parte exterior de la ventana cuando se agregan) cuando un objeto de servidor está activado en el lugar.

wParam No usa (0)
lParam LPRECT rectClient, puede ser NULL
devuelve Rectángulo es TRUE si el nuevo cliente regresó, FALSE en caso contrario

WM_SIZECHILD

Este mensaje es enviado por COleResizeBar a su ventana propietaria (vía GetOwner) cuando el usuario cambia el tamaño de la barra de tamaño con los controladores de tamaño. COleIPFrameWnd responde a este mensaje al intentar cambiar la posición de la ventana de marco como el usuario ha solicitado.

El nuevo rectángulo, dado en coordenadas de cliente relativa a la ventana del marco que contiene la barra de tamaño, es apuntado por lParam.

wParam No usa (0)
lParam LPRECT rectNew
devuelve No usa (0)

WM_DISABLEMODAL

Este mensaje se envía a todas las ventanas emergentes propiedad por una ventana de marco que se está desactivada. La ventana de marco utiliza el resultado para determinar si o no deshabilitar la ventana emergente.

Puede utilizar esto para realizar un procesamiento especial en su ventana emergente cuando entra en el marco de un estado modal o mantener ciertas ventanas emergentes de obtener deshabilitado. Tooltips usar este mensaje para destruir a sí mismos cuando la ventana de marco entra en un estado modal, por ejemplo.

wParam No usa (0)
lParam No usa (0)
devuelve No cero para no deshabilitar la ventana, 0 indica que la ventana se deshabilitará

WM_FLOATSTATUS

Este mensaje se envía a todas las ventanas emergentes de propiedad por una ventana de marco cuando el marco está activado o desactivado por otra ventana de marco de nivel superior. Esto es utilizado por la aplicación de MFS_SYNCACTIVE en CMiniFrameWnd, para mantener la activación de estas ventanas emergentes en sincronización con la activación de la ventana de marco de nivel superior.

wParam Es uno de los siguientes valores:
FS_SHOW
FS_HIDE
FS_ACTIVATE
FS_DEACTIVATE
FS_ENABLE
FS_DISABLE
FS_SYNCACTIVE
lParam No usa (0)

El valor devuelto debe ser distinto de cero si FS_SYNCACTIVE es conjunto y la syncronizes de la ventana su activación con el marco principal. CMiniFrameWnd devuelve cero cuando el estilo se establece en MFS_SYNCACTIVE.

Para obtener más información, consulte la aplicación de CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Este mensaje se envía a una ventana de nivel superior cuando una ventana en su "grupo de alto nivel" está activada o desactivada. Una ventana es parte de un grupo de nivel superior si es una ventana de nivel superior (no primario o propietario) o es propiedad de dicha ventana. Este mensaje es similar en uso a WM_ACTIVATEAPP, pero trabaja en situaciones donde windows pertenecientes a distintos procesos se mezclan en una jerarquía de ventanilla única (comunes en aplicaciones OLE).

WM_QUERY3DCONTROLS

Este mensaje se envía durante la creación de ventana para determinar si la ventana debe ser subclases por CTL3D32.DLL. por controles 3D predeterminados están habilitados para CControlBar, CDialog, CPropertySheet y CFormView.

wParam No usa (0)
lParam No usa (0)
devuelve &No cero subclase con CTL3D.nbsp; Se utiliza el valor devuelto por la llamada a Ctl3dSubclassDlgEx.

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Estos mensajes se utilizan en la aplicación de ayuda sensible al contexto. Consulte 28 de nota técnica para obtener más información.

Formatos de recursos privados de MFC

Actualmente es sólo una MFC recursos privados formato definido, RT_DLGINIT.

Formato de recursos RT_DLGINIT

Un formato de recursos privados de MFC se utiliza para almacenar la información de inicialización de diálogo adicional. Esto incluye las cadenas iniciales almacenadas en un cuadro combinado. El formato de este recurso no está diseñado para ser editados manualmente, pero es manejado por Visual C++.

Visual C++ y este recurso RT_DLGINIT no están necesario utilizar las funciones conexas de MFC ya existen API alternativas al uso de la información en el recurso. Utilizando Visual C++ hace mucho más fácil de escribir, mantener y traducir su aplicación a largo plazo.

La estructura básica de un recurso RT_DLGINIT es la siguiente:

+---------------+nbsp;                   \
| ID de control |   UI&NT |
+---------------+                    |
| Mensaje # |   UINT |
+---------------+                    |
|length de datos |   DWORD |
+---------------+                    | Repite
|   Datos |   Longitud variable |   para cada control
|     ...      |   y formato |   y el mensaje
+---------------+                    /
|     0         |   BYTE
+---------------+

Una sección repetida contiene el identificador de control para enviar el mensaje, el mensaje # para enviar (un mensaje de Windows normal) y una longitud variable de datos. Se envía el mensaje de Windows en un formulario:

SendDlgItemMessage (lt;ID. de control >, < mensaje # >, 0 & <Data>)

Se trata de un formato muy general, permitiendo que cualquier contenido de datos y mensajes de Windows. El editor de recursos de Visual C++ y MFC sólo admiten un subconjunto limitado de mensajes de Windows: CB_ADDSTRING para las opciones de lista iniciales para cuadros combinados (los datos están una cadena de texto).

&Notas técnicas por número |nbsp; Notas técnicas por categoría

Index