La clase CFrameWnd proporciona la funcionalidad de una interfaz de documento único de Windows (SDI) se superponen o ventana emergente marco, junto con los miembros para la gestión de la ventana.
Para crear una ventana de marco útil para su aplicación, derive una clase de CFrameWnd. Agregar variables miembro a la clase derivada para almacenar datos específicos de su aplicación. Mapa de implementar funciones de miembro de controlador de mensajes y un mensaje en la clase derivada para especificar qué sucede cuando los mensajes se dirigen a la ventana.
Hay tres formas de construir una ventana de marco:
Indirectamente construirla utilizando una plantilla de documento.
Antes de llamar a crear o LoadFrame, debe crear el objeto de ventana de marco del montón utilizando el operador new C++. Antes de llamar a crear, también puede registrar una clase de ventana con la función global de AfxRegisterWndClass para establecer los estilos de icono y clase del marco.
Utilizar la función miembro Create para pasar parámetros de creación del marco como argumentos de inmediatos.
LoadFrame requiere menos argumentos que creary en su lugar recupera la mayoría de sus valores por defecto de recursos, incluyendo el marco leyenda, icono tabla de aceleradores y menú. Para ser accesible a través de LoadFrame, todos estos recursos deben tener el mismo ID de recurso (por ejemplo, IDR_MAINFRAME).
Cuando un objeto CFrameWnd contiene vistas y documentos, se crean indirectamente por el marco en lugar de directamente por el programador. El objeto de CDocTemplate organiza la creación del marco, la creación de las vistas que contienen y la conexión de las vistas del documento correspondiente. Los parámetros del constructor CDocTemplate especifican la CRuntimeClass de las tres clases involucradas (documento, marco y vista). Se utiliza un objeto CRuntimeClass por el marco para crear dinámicamente nuevos marcos cuando especificado por el usuario (por ejemplo, mediante el comando nuevo archivo o el comando nueva ventana de múltiples documentos MDI (interfaz)).
Una clase de ventana de marco derivada de CFrameWnd debe declararse con DECLARE_DYNCREATE para que el mecanismo RUNTIME_CLASS anterior funcione correctamente.
Un CFrameWnd contiene implementaciones predeterminadas para realizar las siguientes funciones de una ventana principal en una aplicación típica de Windows:
Una ventana de marco de CFrameWnd realiza un seguimiento de una vista activa que es independiente de la ventana activa de Windows o el foco de entrada actual. Cuando se reactive el marco, la vista activa se notifica llamando CView::OnActivateView.
Mensajes de comando y muchos mensajes de notificación de marco común, incluidos aquellos manejados por el OnSetFocus, OnHScrolly OnVScroll funciones de CWnd, son delegados por una ventana de marco de CFrameWnd a la vista activa.
La vista activa (o activa ventana de marco MDI secundarios en el caso de un marco MDI) puede determinar el título de la ventana de marco. Esta característica se puede desactivar si desactiva el bit de estilo FWS_ADDTOTITLE de la ventana de marco.
Una ventana de marco CFrameWnd administra el posicionamiento de las barras de control, vistas y otras ventanas secundarias dentro de área de cliente de la ventana de marco. Una ventana de marco también hace tiempo inactivo actualizar de la barra de herramientas y otros botones de la barra de control. Una ventana de marco de CFrameWnd también tiene implementaciones predeterminadas de comandos para alternar activar y desactivar la barra de Estado y la barra de herramientas.
Una ventana de marco CFrameWnd administra la barra de menú principal. Cuando se muestra un menú emergente, la ventana de marco utiliza el mecanismo UPDATE_COMMAND_UI para determinar qué elementos de menú deben activados, desactivados o marcadas. Cuando el usuario selecciona un elemento de menú, la ventana de marco actualiza la barra de Estado con la cadena de mensaje para ese comando.
Una ventana de marco de CFrameWnd tiene una tabla de aceleradores opcional que traduce automáticamente los aceleradores de teclado.
Una ventana de marco de CFrameWnd tiene un opcional ayuda ID con LoadFrame que se utiliza para obtener ayuda sensible al contexto. Una ventana de marco es el principal orchestrator de Estados semimodal como ayuda contextual (Mayús + F1) y modos de vista previa de impresión.
Abrirá una ventana de marco de CFrameWnd un archivo desde el administrador de archivos de arrastrar y colocar en la ventana de marco. Si una extensión de archivo está registrada y asociada a la aplicación, la ventana de marco responde a la solicitud abierta de exchange (DDE) de datos dinámicos que se produce cuando el usuario abre un archivo de datos en el administrador de archivos o cuando se llama a la función de Windows ShellExecute.
Si la ventana de marco es la ventana principal de la aplicación (es decir, CWinThread::m_pMainWnd), cuando el usuario cierra la aplicación, la ventana de marco solicita al usuario que guarde los documentos modificados (para OnClose y OnQueryEndSession).
Si la ventana de marco es la ventana principal de la aplicación, la ventana de marco es el contexto de ejecución de WinHelp. Cierre la ventana de marco se apagará de WINHELP.EXE si fue lanzado para obtener ayuda para esta aplicación.
No utilice el operador delete de C++ para destruir una ventana de marco. Utilice CWnd::DestroyWindow en su lugar. La aplicación de CFrameWnd de PostNcDestroy eliminará el objeto C++ cuando se destruye la ventana. Cuando el usuario cierra la ventana de marco, el controlador predeterminado de OnClose llamará DestroyWindow.
Para obtener más información sobre CFrameWnd, consulte Marco ventana temas en la Guía del programador de Visual C++.