Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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::AddView
interfaz , 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 CView
objeto de ventana derivado. En el caso de CSplitterWnd
, el área cliente de la vista se rellena con el CSplitterWnd
objeto window y los CView
objetos de ventana derivados (uno por panel dividido) se crean como ventanas secundarias de CSplitterWnd
.