TN025: Vytvoření dokumentu, zobrazení a rámečku
Poznámka
Následující technická poznámka se od prvního zahrnutí do online dokumentace neaktualizovala. V důsledku toho můžou být některé postupy a témata zastaralé nebo nesprávné. Nejnovější informace doporučujeme vyhledat v online indexu dokumentace, které vás zajímá.
Tato poznámka popisuje problémy s vytvářením a vlastnictvím pro WinApps, DocTemplates, Dokumenty, rámce a zobrazení.
WinApp
V systému je jeden CWinApp
objekt.
Je staticky vytvořen a inicializován interní implementací WinMain
architektury . Musíte odvodit CWinApp
z toho, aby bylo něco užitečného (výjimka: Knihovny DLL rozšíření MFC by neměly mít CWinApp
instanci – inicializace se provádí místo DllMain
toho).
CWinApp
Jeden objekt vlastní seznam šablon dokumentů (aCPtrList
). Pro každou aplikaci existuje jedna nebo více šablon dokumentů. DocTemplates jsou obvykle načteny ze souboru prostředků (tj. pole řetězců) v CWinApp::InitInstance
.
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
CWinApp
Jeden objekt vlastní všechna okna rámečku v aplikaci. Okno hlavního rámce aplikace by mělo být uloženo CWinApp::m_pMainWnd
v ; obvykle nastavíte m_pMainWnd v InitInstance
implementaci, pokud jste ji nenechali AppWizard udělat za vás. U rozhraní s jedním dokumentem (SDI) je CFrameWnd
to jedno, které slouží jako hlavní okno rámce aplikace a také jediné okno rámečku dokumentu. Pro více rozhraní dokumentů (MDI) je to MDI-Frame (třída CMDIFrameWnd
), která slouží jako hlavní okno rámce aplikace, které obsahuje všechny podřízené CFrameWnd
. Každé podřízené okno je třídy CMDIChildWnd
(odvozené) CFrameWnd
a slouží jako jedno z potenciálně mnoha oken rámečku dokumentu.
DocTemplates
Jedná se CDocTemplate
o tvůrce a manažera dokumentů. Vlastní dokumenty, které vytváří. Pokud vaše aplikace používá níže popsaný přístup založený na prostředcích, nebude se muset odvozovat .CDocTemplate
U aplikace SDI třída CSingleDocTemplate
sleduje jeden otevřený dokument. Pro aplikaci MDI třída CMultiDocTemplate
uchovává seznam (a CPtrList
) všech aktuálně otevřených dokumentů vytvořených z této šablony. CDocTemplate::AddDocument
a CDocTemplate::RemoveDocument
zadejte virtuální členské funkce pro přidání nebo odebrání dokumentu ze šablony. CDocTemplate
je přítel CDocument
, abychom mohli nastavit chráněný CDocument::m_pDocTemplate
zpětný ukazatel tak, aby odkazovat zpět na šablonu dokumentu, která dokument vytvořila.
CWinApp
zpracovává výchozí OnFileOpen
implementaci, která se následně dotazuje na všechny šablony dokumentace. Implementace zahrnuje hledání již otevřených dokumentů a rozhodování o tom, v jakém formátu se mají otevírat nové dokumenty.
CDocTemplate
spravuje vazbu uživatelského rozhraní pro dokumenty a rámce.
CDocTemplate
uchovává počet nepojmenovaných dokumentů.
CDocument
A CDocument
je vlastněna .CDocTemplate
Dokumenty mají seznam aktuálně otevřených zobrazení (odvozených z CView
), které dokument zobrazují (a CPtrList
).
Dokumenty nevytvoří nebo zničí zobrazení, ale po jejich vytvoření se k sobě připojí. Když je dokument zavřený (tj. prostřednictvím souboru nebo zavření), zavře se všechna připojená zobrazení. Když je poslední zobrazení dokumentu zavřené (tj. okno/zavření), dokument se zavře.
Rozhraní CDocument::AddView
, RemoveView
slouží k údržbě seznamu zobrazení. CDocument
je přítel CView
, abychom mohli nastavit CView::m_pDocument
zadní ukazatel.
CFrameWnd
Role CFrameWnd
(označovaná také jako rámec) hraje stejnou roli jako v prostředí MFC 1.0, ale nyní CFrameWnd
je třída navržena tak, aby byla použita v mnoha případech bez odvození nové třídy. Odvozené třídy CMDIFrameWnd
a CMDIChildWnd
jsou také rozšířeny tak mnoho standardních příkazů jsou již implementovány.
Zodpovídá CFrameWnd
za vytváření oken v klientské oblasti rámce. Za normálních okolností je jedno hlavní okno vyplňující klientskou oblast rámce.
V okně MDI-Frame se v klientské oblasti vyplní ovládací prvek MDICLIENT, který je nadřazený všemi okny s rámečkem MDI-Child. V případě okna rámce SDI nebo okna rámce MDI-Child je klientská oblast obvykle vyplněna objektem -odvozeného CView
okna. V případě CSplitterWnd
, klientská oblast zobrazení je vyplněna CSplitterWnd
objekt okna a CView
-odvozené objekty okna (jeden na rozdělené podokno) jsou vytvořeny jako podřízená okna CSplitterWnd
.
Viz také
Technické poznámky podle čísel
Technické poznámky podle kategorií