Compartir a través de


TN025: Creación de documentos, vistas y marcos

Nota:

La nota técnica siguiente no se ha actualizado desde que se incluyó por primera vez en la documentación en línea. Como resultado, algunos procedimientos y temas podrían estar obsoletos o ser incorrectos. Para obtener información más reciente, se recomienda buscar el tema de interés en el índice de la documentación en línea.

En esta nota se describen los problemas de creación y propiedad de WinApps, DocTemplates, Documentos, Marcos y Vistas.

WinApp

Hay un objeto CWinApp en el sistema.

Se construye e inicializa estáticamente mediante la implementación interna del marco de WinMain. Debe derivar de CWinApp para hacer cualquier cosa útil (excepción: los archivos DLL de extensión MFC no deben tener una instancia de CWinApp, la inicialización se realiza en DllMain en su lugar).

Un objeto CWinApp posee una lista de plantillas de documento (un CPtrList). Hay una o varias plantillas de documento por aplicación. DocTemplates normalmente se cargan desde el archivo de recursos (es decir, una matriz de cadenas) en CWinApp::InitInstance.

pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);

AddDocTemplate(pTemplate);

El único objeto CWinApp posee todas las ventanas de marco de la aplicación. La ventana de marco principal de la aplicación debe almacenarse en CWinApp::m_pMainWnd; normalmente se establece m_pMainWnd en la implementación InitInstance si no ha dejado que AppWizard lo haga por usted. Para la interfaz de documento único (SDI), se trata de una CFrameWnd que actúa como ventana principal del marco de la aplicación, así como la única ventana de marco de documento. Para varias interfaces de documento (MDI), se trata de un MDI-Frame (clase CMDIFrameWnd) que actúa como la ventana de marco de aplicación principal que contiene todos los elementos secundarios CFrameWnd. Cada ventana secundaria es de clase CMDIChildWnd (derivada de CFrameWnd) y actúa como una de las ventanas de marco de documento potencialmente muchas.

DocTemplates

CDocTemplate es el creador y administrador de documentos. Posee los documentos que crea. Si la aplicación usa el enfoque basado en recursos que se describe a continuación, no será necesario derivar de CDocTemplate.

Para una aplicación SDI, la clase CSingleDocTemplate realiza un seguimiento de un documento abierto. Para una aplicación MDI, la clase CMultiDocTemplate mantiene una lista (una CPtrList) de todos los documentos abiertos actualmente creados a partir de esa plantilla. CDocTemplate::AddDocument y CDocTemplate::RemoveDocument proporcionan las funciones miembro virtuales para agregar o quitar un documento de la plantilla. CDocTemplate es un amigo de CDocument para que podamos establecer el puntero atrás protegido CDocument::m_pDocTemplate para que apunte a la plantilla de documento que creó el documento.

CWinApp controla la implementación OnFileOpen predeterminada, que a su vez consultará todas las plantillas de documento. La implementación incluye buscar documentos ya abiertos y decidir en qué formato abrir nuevos documentos.

CDocTemplate administra el enlace de la interfaz de usuario para documentos y marcos.

CDocTemplate mantiene un recuento del número de documentos sin nombre.

CDocument

Un CDocument es propiedad de un CDocTemplate.

Los documentos tienen una lista de vistas abiertas actualmente (derivadas de CView) que ven el documento (un CPtrList).

Los documentos no crean ni destruyen las vistas, pero se adjuntan entre sí después de crearlas. Cuando se cierra un documento (es decir, a través de Archivo/Cerrar), se cerrarán todas las vistas adjuntas. Cuando se cierre la última vista de un documento (es decir, Ventana/Cerrar), se cerrará el documento.

La interfaz CDocument::AddView, RemoveView se usa para mantener la lista de vistas. CDocument es un amigo de CView para que podamos establecer el puntero trasero CView::m_pDocument.

CFrameWnd

Un CFrameWnd (también conocido como marco) desempeña el mismo papel que en MFC 1.0, pero ahora la clase CFrameWnd está diseñada para usarse en muchos casos sin derivar una nueva clase. Las clases derivadas CMDIFrameWnd y CMDIChildWnd también se mejoran, por lo que ya se han implementado muchos comandos estándar.

CFrameWnd es responsable de crear ventanas en el área cliente del marco. Normalmente hay una ventana principal que rellena el área de cliente del marco.

Para una ventana de MDI-Frame, el área de cliente se rellena con el control MDICLIENT, que a su vez es el elemento primario de todas las ventanas de marco de MDI-Child. Para una ventana de SDI-Frame o una ventana de marco de MDI-Child, el área de cliente normalmente se rellena con un objeto de ventana derivado de CView. En el caso de CSplitterWnd, el área cliente de la vista se rellena con el objeto de ventana CSplitterWnd y los objetos de ventana derivados CView (uno por panel dividido) se crean como ventanas secundarias de CSplitterWnd.

Consulte también

Notas técnicas por número
Notas técnicas por categoría