TN025 : document, vue, et création de frame
[!REMARQUE]
La note technique suivante n'a pas été modifiée depuis si c'était première inclus dans la documentation en ligne.Par conséquent, certaines procédures et rubriques peuvent être obsolètes ou incorrects.Pour obtenir les informations les plus récentes, il est recommandé que vous trouviez la rubrique d'intérêt dans l'index de la documentation en ligne.
Cette remarque décrit les problèmes de conception et de propriété pour WinApps, DocTemplates, documents, vues et les vues.
WinApp
Il existe un objet d' CWinApp dans le système.
Il est statiquement construit et initialisé par l'implémentation interne de l'infrastructure d' WinMain.Vous devez dériver d' CWinApp pour faire n'importe quoi utile (exception : les DLL d'extension ne doivent pas avoir une instance d' CWinApp — l'initialisation est effectuée dans DllMain à la place).
L'objet d' CWinApp possède une liste de modèles de document ( CPtrList).Il existe un ou plusieurs modèles de document par application.DocTemplates sont habituellement chargés à partir de le fichier de ressources (autrement dit, un tableau de chaînes) dans CWinApp::InitInstance.
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
L'objet d' CWinApp possède toutes les fenêtres frames dans l'application.La fenêtre frame principale pour l'application doit être stockée dans CWinApp::m_pMainWnd; habituellement vous m_pMainWnd défini dans l'implémentation d' InitInstance si vous n'avez pas autorisé AppWizard le faites pour vous.Pour l'interface monodocument (SDI) il s'agit d'un CFrameWnd qui sert de fenêtre frame d'application principale ainsi que de seule fenêtre frame de document.Pour l'interface (MDI) multidocument il s'agit d'un MDI-Frame (classe CMDIFrameWnd) qui sert de fenêtre frame d'application principale qui contient tous les CFrameWndenfant S.Chaque fenêtre enfant est de classe CMDIChildWnd (dérivé d' CFrameWnd) et de servir d'une potentiellement de plusieurs fenêtres frame de document.
DocTemplates
CDocTemplate est le créateur et le gestionnaire des documents.Il possède les documents qu'il crée.Si votre application utilise l'approche basée sur une ressource décrit ci-dessous, elle n'aura pas besoin de dériver d' CDocTemplate.
Pour une application SDI, la classe CSingleDocTemplate gère un document ouvert.Pour une application MDI, la classe CMultiDocTemplate conserve une liste ( CPtrList) de tous les documents ouverts actuellement créés à partir de ce modèle.CDocTemplate::AddDocument et CDocTemplate::RemoveDocument fournissent les fonctions membres virtuelles pour ajouter ou supprimer un document du modèle.CDocTemplate est une fonction friend de CDocument donc nous pouvons définir le pointeur protégé DOS de 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 d' OnFileOpen , qui interroge ensuite tous les modèles de document.L'implémentation comprend rechercher déjà des documents ouverts et déterminer dans quel format pour ouvrir de nouveaux documents.
CDocTemplate gère la liaison d'interface utilisateur pour les documents et les frames.
CDocTemplate conserve le nombre de documents sans nom.
CDocument
CDocument est détenu par CDocTemplate.
Les documents ont une liste de vues ouverts (dérivées d' CView) qui affichent le document ( CPtrList).
Les documents ne créent pas de chargement/destruction les vues, mais ils sont associés les unes après leur création.Lorsqu'un document est fermé (autrement dit, via le fichier/fin), toutes les vues jointes sont fermées.Lorsque la dernière vue dans un document est fermée (autrement dit, une fenêtre/le fin) le document est fermé.
CDocument::AddView, interface d' RemoveView est utilisé pour maintenir la liste de vue.CDocument est une fonction friend d' CView donc nous pouvons définir le pointeur de changements de CView::m_pDocument .
CFrameWnd
CFrameWnd (également appelé un frame) joue le même rôle que dans MFC 1,0, mais maintenant la classe d' CFrameWnd est conçu pour être utilisé dans de nombreux cas sans dériver une nouvelle classe.Les classes dérivées CMDIFrameWnd et CMDIChildWnd sont également améliorées forme 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 le remplissage de la zone cliente du frame.
Pour une fenêtre de MDI-Frame, la zone cliente est remplie avec le contrôle de MDICLIENT qui est ensuite le parent de toutes les fenêtres frame enfant MDI.Pour une fenêtre de SDI-Frame ou une fenêtre frame enfant MDI, la zone cliente est généralement remplie avec CView- l'objet window dérivé.Dans le cas de CSplitterWnd, la zone cliente de la vue est remplie avec l'objet window d' CSplitterWnd , et l' CView- les objets window dérivés (un par volet fractionné) sont créés comme fenêtres enfants d' CSplitterWnd.