Partager via


TN025 : création de document, vue et frame

Remarque

La note technique suivante n'a pas été mise à jour depuis son inclusion initiale dans la documentation en ligne. Par conséquent, certaines procédures et rubriques peuvent être obsolètes ou incorrectes. Pour obtenir les informations les plus récentes, il est recommandé de rechercher l'objet qui vous intéresse dans l'index de la documentation en ligne.

Cette note décrit les problèmes de conception et de propriété liés aux objets WinApp, objets DocTemplate, documents, frames et vues.

WinApp

Le système contient un objet CWinApp.

Il est statiquement construit et initialisé par l'implémentation interne de le framework de WinMain. Vous devez dériver de CWinApp ce qui est utile (exception : les DLL d’extension MFC ne doivent pas avoir d’instance CWinApp : l’initialisation est effectuée à DllMain la place).

L'objet CWinApp possède une liste de modèles de document (CPtrList). Il existe un ou plusieurs modèles de document par application. Les modèles de documents (DocTemplates) sont généralement chargés à partir du fichier de ressources (autrement dit, un tableau de chaînes) dans CWinApp::InitInstance.

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

AddDocTemplate(pTemplate);

L'objet CWinApp possède toutes les fenêtres frame dans l'application. La fenêtre de trame principale de l’application doit être stockée CWinApp::m_pMainWnddans ; généralement, vous définissez m_pMainWnd dans l’implémentation InitInstance si vous n’avez pas laissé AppWizard le faire pour vous. Pour l'interface monodocument (SDI), il s'agit d'un CFrameWnd qui fait office de fenêtre frame d'application principale et de fenêtre frame de document unique. Pour l'interface multidocument (MDI), il s'agit d'un frame MDI (classe CMDIFrameWnd) qui fait office de fenêtre frame d'application principale contenant tous les enfant CFrameWnds. Chaque fenêtre enfant est de la classe CMDIChildWnd (dérivée de CFrameWnd) et est considérée comme l'une des multiples fenêtres frame de document.

DocTemplates

CDocTemplate est le créateur et le gestionnaire de documents. Il est propriétaire des documents qu'il crée. Si votre application utilise une approche basée sur les ressources décrite ci-dessous, il ne sera pas nécessaire d'effectuer une dérivation à partir de CDocTemplate.

Pour une application SDI, la classe CSingleDocTemplate fait le suivi d'un document ouvert. Pour une application MDI, la classe CMultiDocTemplate conserve une liste (CPtrList) de tous les documents actuellement ouverts créés à partir de ce modèle. CDocTemplate::AddDocument et CDocTemplate::RemoveDocument fournissent des fonctions membres virtuelles pour ajouter ou supprimer un document du modèle. CDocTemplate est un ami de CDocument sorte que nous puissions définir le pointeur de retour protégé CDocument::m_pDocTemplate pour pointer vers le modèle de document qui a créé le document.

CWinApp gère l'implémentation par défaut de OnFileOpen, qui à son tour interrogera tous les modèles du document. L'implémentation inclut la recherche des documents déjà ouverts et la définition du format permettant d'ouvrir de nouveaux documents.

CDocTemplate gère la liaison d'interface utilisateur des documents et des frames.

CDocTemplate conserve le nombre de documents sans nom.

CDocument

A CDocument appartient à un CDocTemplate.

Les documents ont une liste de vues actuellement ouvertes (dérivées de CView) qui affichent le document ( CPtrList).

Les documents ne créent pas/ne détruisent pas les vues, mais ils sont joints entre eux lorsqu’ils sont créés. Lorsqu'un document est fermé (autrement dit, via Fichier/Fermer), toutes les vues jointes sont fermées. Lorsque la dernière vue sur un document est fermée (autrement dit, Fenêtre/Fermer) le document est fermé.

Les interfaces CDocument::AddView, RemoveView sont utilisées pour contenir la liste des vues. CDocument est un ami de CView sorte que nous pouvons définir le CView::m_pDocument pointeur arrière.

CFrameWnd

CFrameWnd (également appelé frame) joue le même rôle que dans MFC 1.0, mais désormais la classe CFrameWnd est conçue pour être utilisée dans de nombreux cas sans dériver une nouvelle classe. Les classes dérivées CMDIFrameWnd et CMDIChildWnd sont également améliorées, donc bon nombre de commandes standard sont déjà implémentées.

CFrameWnd est chargé de créer des fenêtres dans la zone cliente du frame. Normalement, il existe une fenêtre principale remplissant la zone cliente du frame.

Pour une fenêtre de frame MDI, la zone cliente est remplie avec le contrôle MDICLIENT qui est à son tour le parent de toutes les fenêtres frame enfants MDI. Pour une fenêtre frame SDI ou une fenêtre frame enfants MDI, la zone cliente est généralement remplie par un objet fenêtre CView dérivé. Dans le cas de CSplitterWnd, la zone cliente de la vue est remplie avec l'objet fenêtre CSplitterWnd, et les objets de fenêtre dérivés de CView (un par volet de fractionnement) sont créés en tant que fenêtres enfants de CSplitterWnd.

Voir aussi

Notes techniques par numéro
Notes techniques par catégorie