Sdílet prostřednictvím


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í WinMainarchitektury . 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_pMainWndv ; 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é) CFrameWnda 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 CViewokna. 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í