Compartir a través de


TN025: Creación de documentos, vistas y fotogramas

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 incorrectos. Para obtener la información más reciente, se recomienda buscar el tema de interés en el índice de 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 CWinApp objeto 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 CWinApp instancia, la inicialización se realiza en DllMain su lugar).

El único CWinApp objeto 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 CWinApp objeto 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 InitInstance implementación si no ha dejado que AppWizard lo haga por usted. Para la interfaz de documento único (SDI), esta es la CFrameWnd que actúa como ventana principal del marco de 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 principal del marco de aplicación 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 descrito 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 (a 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 predeterminada OnFileOpen , 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 objeto es propiedad de .CDocTemplate

Los documentos tienen una lista de vistas abiertas actualmente (derivadas de CView) que están viendo el documento (un CPtrList).

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

La CDocument::AddViewinterfaz , RemoveView se usa para mantener la lista de vistas. CDocument es un amigo de CView para que podamos establecer el CView::m_pDocument puntero atrás.

CFrameWnd

Un CFrameWnd (también conocido como marco) desempeña el mismo papel que en MFC 1.0, pero ahora la CFrameWnd clase 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 implementan 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 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 CViewobjeto de ventana derivado. En el caso de CSplitterWnd, el área cliente de la vista se rellena con el CSplitterWnd objeto window y los CViewobjetos de ventana derivados (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