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

Remarque

La bibliothèque Microsoft Foundation Classes (MFC) continue d’être prise en charge. Toutefois, nous n’ajoutons plus de fonctionnalités ni ne mettons à jour la documentation.

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.

Il est statiquement construit et initialisé par l'implémentation interne de le framework de WinMain. Vous devez dériver de CWinApp pour faire quelque chose d'utile (exception : les DLL d’extension MFC ne doivent pas avoir d’instance CWinApp — l’initialisation est effectuée dans 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 de caractères) 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 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 classe CMDIChildWnd (dérivée de CFrameWnd) et sert d’une des fenêtres de cadre de document potentiellement nombreuses.

DocTemplates

Le CDocTemplate est le créateur et le 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 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/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.

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 cadre.

Pour une fenêtre MDI-Frame, la zone cliente est remplie par le contrôle MDICLIENT, qui est à son tour le parent de toutes les fenêtres à cadre MDI-Child. Pour une fenêtre SDI-Frame ou une fenêtre de cadre MDI-Child, la zone client est généralement remplie par un objet fenêtre dérivé de CView. 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 CView (un par volet fractionné) sont créés en tant que fenêtres filles du CSplitterWnd.

Voir aussi

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