Partager via


TN025 : Création de documents, d’affichage et de frame

Remarque

La note technique suivante n’a pas été mise à jour depuis sa première inclusion 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 la rubrique intéressante dans l’index de documentation en ligne.

Cette note décrit les problèmes de création et de propriété pour WinApps, DocTemplates, Documents, Frames et Views.

WinApp

Il existe un CWinApp objet dans le système.

Elle est construite de manière statique et initialisée par l’implémentation interne du 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 (a CPtrList). Il existe un ou plusieurs modèles de document par application. Les 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);

Le seul CWinApp objet 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 de document unique (SDI), il s’agit d’une CFrameWnd fenêtre qui sert de fenêtre de cadre d’application principale ainsi que de la seule fenêtre de cadre de document. Pour plusieurs interfaces de document (MDI), il s’agit d’un MDI-Frame (classe CMDIFrameWnd) qui sert de fenêtre principale de cadre d’application qui contient tous les enfants CFrameWnd. Chaque fenêtre enfant est de classe CMDIChildWnd (dérivée de CFrameWnd) et sert d’une des fenêtres de cadre de document potentiellement nombreuses.

DocTemplates

Il CDocTemplate s’agit du créateur et du gestionnaire de documents. Il possède les documents qu’il crée. Si votre application utilise l’approche basée sur les ressources décrite ci-dessous, il n’est pas nécessaire de dériver de CDocTemplate.

Pour une application SDI, la classe CSingleDocTemplate effectue le suivi d’un document ouvert. Pour une application MDI, la classe CMultiDocTemplate conserve une liste (a CPtrList) de tous les documents actuellement ouverts créés à partir de ce modèle. CDocTemplate::AddDocument et CDocTemplate::RemoveDocument fournissez les 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 OnFileOpen , qui interroge à son tour tous les modèles de documentation. L’implémentation inclut la recherche de documents déjà ouverts et la détermination du format dans lequel ouvrir de nouveaux documents.

CDocTemplate gère la liaison d’interface utilisateur pour les documents et les cadres.

CDocTemplate conserve le nombre de documents non nommés.

CDocument

A CDocument appartient à un CDocTemplate.

Les documents ont une liste d’affichages actuellement ouverts (dérivés de CView) qui affichent le document (a CPtrList).

Les documents ne créent pas/détruisent les vues, mais ils sont attachés les uns aux autres après leur création. Lorsqu’un document est fermé (c’est-à-dire, via Fichier/Fermeture), toutes les vues jointes sont fermées. Lorsque la dernière vue d’un document est fermée (c’est-à-dire, Fenêtre/Fermeture) le document est fermé.

L’interface CDocument::AddView, RemoveView est utilisée pour gérer la liste d’affichages. CDocument est un ami de CView sorte que nous pouvons définir le CView::m_pDocument pointeur arrière.

CFrameWnd

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

Il CFrameWnd est responsable de la création de fenêtres dans la zone cliente du cadre. Normalement, il existe une fenêtre principale remplissant la zone cliente du cadre.

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

Voir aussi

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