Cómo utilizar la clase CFormView en la interfaz de único documento (SDI) y aplicaciones de múltiples documentos (MDI) de la interfaz

Nota: Microsoft Visual C++ .NET (2002) es compatible con el modelo de código administrado que es proporcionado por el Microsoft.NET Framework y el modelo de código nativo Microsoft Windows no administrado. La información de este artículo sólo se aplica a código no administrado de Visual C++.

Nota: Microsoft Visual C++ 2005 admite el modelo de código administrado que es proporcionado por el Microsoft.NET Framework y el modelo de código nativo Microsoft Windows no administrado.

Resumen

La clase CFormView proporciona un método cómodo para colocar los controles en una vista que se basa en una plantilla de cuadro de diálogo. El procedimiento general para utilizar CFormView se describe en la documentación de la clase y se ilustra en las aplicaciones de ejemplo VIEWEX y CHKBOOK proporcionadas con Microsoft Foundation Classes (MFC) versiones 2.x y superior. Sin embargo, estas aplicaciones no demuestran lo que el tamaño inicial de la ventana de marco para ser el mismo que el tamaño inicial del formulario.

La sección siguiente enumera los pasos necesarios para admitir la creación de una interfaz de único documento (SDI) o múltiples documentos aplicación MDI (interfaz) basado en CFormView, cambiar el tamaño de la ventana de marco inicial alrededor del formulario, cambiar el estilo del marco y cerrar un documento MDI utilizando un botón en el formulario.

Más información

Los pasos siguientes describen cómo crear una aplicación de MFC AppWizard utilizando el CFormView como la vista predeterminada:
  1. Utilice el Asistente para aplicaciones para generar una aplicación SDI o MDI. Esto inserta una plantilla de cuadro de diálogo con los estilos adecuados establecidos para el archivo de recursos del proyecto.

    Visual Studio 6.0:

    En el paso 6 de AppWizard, seleccione la clase de vista. En el cuadro combinado de la clase Base , seleccione CFormView para especificar CFormView como clase base.

    Visual Studio .NET o Visual Studio 2005:

    En el paso 1 de AppWizard, seleccione Clases generadas. En el cuadro combinado de la clase Base , seleccione CFormView para especificar CFormView como clase base.
  2. Reemplace la función miembro OnUpdate() y llamar a UpdateData() como se indica en la documentación de CFormView para actualizar las variables miembro con los datos del documento actual y para realizar el intercambio de datos de cuadro de diálogo (DDX).

    NOTA: UpdateData no es virtual y llamar a la clase base asegura de que la clase derivada se llama DoDataExchange mediante polimorfismo estándar. Los Estados de documentación de CFormView para llamar, no reemplazar UpdateData.
  3. Si desea establecer el tamaño inicial de la vista formulario, reemplace la función OnInitialUpdate(). El texto siguiente proporciona información adicional acerca de este paso, que es ligeramente diferente en una aplicación SDI o MDI.

Cambiar el tamaño de un marco SDI principal alrededor de CFormView

Para cambiar el tamaño del marco principal de una aplicación SDI (que utiliza CFormView como su clase de vista) para tener el tamaño apropiado para el formulario que ha diseñado en el estudio de la aplicación, reemplace la función OnInitialUpdate() en la clase derivada de CFormView, como sigue:
      void CMyFormView::OnInitialUpdate()      {
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit(); // default argument is TRUE
}

La función ResizeParentToFit() no impide que el formulario cambia de tamaño cuando el usuario cambia el tamaño del marco principal aplicación (desplazamiento se agregan automáticamente barras si es necesario). Para modificar el estilo de la ventana de marco es el elemento primario de una vista de formulario, puede reemplazar la función PreCreateWindow() en la clase CMainFrame generada por el Asistente para aplicaciones. Por ejemplo, para quitar el estilo WS_THICKFRAME e impedir que el usuario cambiar el tamaño de la ventana, declarar PreCreateWindow() en MAINFRM. H y agregue el código siguiente a MAINFRM. CPP:
      BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs)      {
cs.style &= ~WS_THICKFRAME;
return CFrameWnd::PreCreateWindow(cs);
}

Cambiar el tamaño de un marco MDI secundario alrededor de CFormView

El proceso de cambiar el tamaño de un marco MDI secundario es similar a cambiar el tamaño de un marco principal para una aplicación SDI, como se explicó anteriormente. Sin embargo, la llamada RecalcLayout() no es necesaria.

Para cambiar el tamaño de un marco MDI secundario alrededor de una vista de formulario, reemplace la función OnInitialUpdate() en la clase derivada de CFormView como sigue:
      void CMDIFormView::OnInitialUpdate()      {
CFormView::OnInitialUpdate();
ResizeParentToFit(); // Default argument is TRUE.
}

Si la aplicación pasa por alto el argumento predeterminado a la función ResizeParentToFit(), se producen esencialmente las mismas consecuencias que para una aplicación SDI, como se explicó anteriormente. Además, la ventana secundaria puede ser demasiado grande para el marco principal MDI envolvente o para toda la pantalla.

Para cambiar el estilo del marco MDI secundario (por ejemplo, para quitar el estilo WS_THICKFRAME, por lo que el usuario no puede cambiar el tamaño de la ventana), derive una clase de ventana secundaria MDI y reemplace la función PreCreateWindow como se muestra en el ejemplo de SDI anterior.

Cerrar un formulario MDI con un botón

Para crear un botón en un formulario que se cierra el documento Agregue un controlador de mensaje para el mensaje BN_CLICKED a la clase CFormView. Asegúrese de que los botones de CFormView no tienen los identificadores de forma predeterminada IDOK o IDCANCEL. Si es así, se creará entradas incorrectas en el mapa de mensajes y funciones incorrectas para los botones.

Una vez el controlador de mensajes, puede simular el comando Cerrar en el menú archivo con el código siguiente:
      void CMyForm::OnClickedButton1()      {
PostMessage(WM_COMMAND, ID_FILE_CLOSE);
}

Este método para cerrar un formulario, pide al usuario que guarde el archivo si la función de miembro IsModified() asociada con el documento devuelve TRUE.
Propiedades

Id. de artículo: 98598 - Última revisión: 12 ene. 2017 - Revisión: 1

Comentarios