Cambiar los estilos de una ventana creada por MFC
En la versión de la función de WinMain , MFC registra varias clases de ventana estándar para usted.Porque no modifica normalmente WinMainde MFC, la función no proporciona ninguna posibilidad de cambiar los estilos de ventana predeterminado de MFC.En este artículo se explica cómo puede cambiar los estilos de una clase de ventana en preregistered en una aplicación existente.
Cambiar estilos en una aplicación MFC New
Si utiliza Visual C++ 2.0 o posterior, puede cambiar los estilos de ventana predeterminadas en el Asistente para aplicaciones cuando crea su aplicación.En las características página de la interfaz de usuario del Asistente para aplicaciones, puede cambiar los estilos a la ventana de marco principal y ventanas secundarias MDI.Para cualquier tipo de la ventana, puede especificar el grosor del marco (general o enrarecer) y cualquiera de los siguientes:
Si la ventana tiene Minimizar o controles Maximizar.
Si aparece la ventana minimizada inicialmente, maximizar, o ninguno.
Para las ventanas de marco principal, también puede especificar si la ventana tiene un menú sistema.Para las ventanas MDI secundarias, puede especificar si la ventana admite paneles splitter.
Cambiar estilos en una aplicación existente
Si cambia los atributos de la ventana en una aplicación existente, siga las instrucciones del resto de este artículo en su lugar.
Para cambiar los atributos de ventana predeterminados utilizados por una aplicación creada de marco con el Asistente para aplicaciones, reemplace la función miembro virtual de PreCreateWindow de la ventana.PreCreateWindow permite que una aplicación para tener acceso al proceso de creación administrado normalmente internamente por la clase de CDocTemplate .El marco de trabajo llama a PreCreateWindow justo antes de crear la ventana.Modificar la estructura de CREATESTRUCT pasada a PreCreateWindow, la aplicación puede cambiar los atributos utilizados para crear la ventana.Por ejemplo, para asegurarse de que una ventana no utilice una leyenda, utilice la operación bit a bit siguiente:
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
La aplicación de ejemplo de CTRLBARS muestra esta técnica para cambiar los atributos de la ventana.Dependiendo de lo que cambia la aplicación en PreCreateWindow, puede ser necesario a la implementación de la clase base de la función.
La siguiente discusión cubre el caso SDI y caso de MDI.
El caso SDI
En una aplicación (SDI) de interfaz de un único documento, el estilo de ventana predeterminada en el marco es una combinación de los estilos de WS_OVERLAPPEDWINDOW y de FWS_ADDTOTITLE .FWS_ADDTOTITLE es un estilo MFC-específico que indica al marco para agregar el título del documento a la leyenda de la ventana.Para cambiar los atributos de la ventana en una aplicación SDI, reemplace la función de PreCreateWindow en la clase derivada de CFrameWnd (que los nombres CMainFramedel Asistente para aplicaciones).Por ejemplo:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// Call the base-class version
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// Create a window without min/max buttons or sizable border
cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;
// Size the window to 1/3 screen size and center it
cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
cs.y = ((cs.cy * 3) - cs.cy) / 2;
cs.x = ((cs.cx * 3) - cs.cx) / 2;
return TRUE;
}
Este código crea una ventana de marco principal sin Minimizar y los botones Maximizar y sin borde importante.La ventana se centra inicialmente en la pantalla.
El caso de MDI
Un poco más trabajo se requiere para cambiar el estilo de ventana de ventana secundaria de una aplicación (MDI) de interfaz de múltiples documentos.De forma predeterminada, una aplicación creada MDI con el Asistente para aplicaciones utiliza la clase predeterminada de CMDIChildWnd definido en MFC.Para cambiar el estilo de ventana de una ventana MDI secundaria, debe derivar una nueva clase de CMDIChildWnd y reemplazar todas las referencias a CMDIChildWnd en el proyecto con referencias a la nueva clase.Probablemente, la única referencia a CMDIChildWnd en la aplicación se encuentra en la función miembro de InitInstance de la aplicación.
El estilo de ventana predeterminada utilizada en una aplicación MDI es una combinación de los estilos de WS_CHILD, de WS_OVERLAPPEDWINDOW, y de FWS_ADDTOTITLE .Para cambiar los atributos de la ventana de las ventanas secundarias de una aplicación MDI, reemplace la función de PreCreateWindow en la clase derivada de CMDIChildWnd.Por ejemplo:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// Create a child window without the maximize button
cs.style &= ~WS_MAXIMIZEBOX;
return CMDIChildWnd::PreCreateWindow(cs);
}
Este código crea las ventanas secundarias MDI sin un botón de maximizar.