TN025: tworzenie dokumentów, widoków i ramek
[!UWAGA]
Następująca uwaga techniczna nie został zaktualizowana od pierwszego uwzględnienia jej w dokumentacji online.W rezultacie niektóre procedury i tematy może być nieaktualne lub nieprawidłowe.Aby uzyskać najnowsze informacje, zaleca się wyszukać temat w indeksie dokumentacji online.
Uwaga Ta opisano problemy tworzenia i własności WinApps, DocTemplates, dokumentów, ramek i widoki.
Aplikacji systemu Windows
Istnieje jeden CWinApp obiektu w systemie.
Jest statycznie zbudowane i inicjowany poprzez wdrożenie wewnętrznych w ramach WinMain.Muszą pochodzić od CWinApp do niczego przydatne (wyjątek: biblioteki DLL rozszerzenia nie powinny mieć CWinApp wystąpienie — inicjowanie odbywa się w DllMain zamiast).
Jeden CWinApp listę szablonów dokumentów jest właścicielem obiektu ( CPtrList).Istnieje co najmniej jeden szablon dokumentu na jeden wniosek.DocTemplates są zazwyczaj ładowane z pliku zasobów (to znaczy, tablica ciągów) w CWinApp::InitInstance.
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
Jeden CWinApp wszystkie okna ramki w aplikacji jest właścicielem obiektu.Okno główne ramek dla aplikacji powinny być przechowywane w CWinApp::m_pMainWnd; zwykle wartość m_pMainWnd w InitInstance realizacji, jeśli nie pozwoli AppWizard zrobi to za Ciebie.Jednolity dokument interfejsu (SDI) jest to jedna CFrameWnd , który służy jako okna ramki głównego aplikacji, a także tylko okno dokumentu w ramce.W przypadku interfejsu wielu dokumentów (MDI) jest MDI-ramki (klasa CMDIFrameWnd), który służy jako okno ramki głównej aplikacji, które zawiera wszystkie podrzędne CFrameWnds.Każde okno dziecko jest klasy CMDIChildWnd (pochodzące z CFrameWnd) i służy jako potencjalnie wiele okien ramek dokumentu.
DocTemplates
CDocTemplate Jest twórcą i Menedżer dokumentów.Dokumenty, które tworzy jest właścicielem.Jeśli aplikacja używa opartych na zasobach podejście opisane poniżej, nie będzie konieczne do uzyskania od CDocTemplate.
Dla aplikacji interfejsu SDI klasy CSingleDocTemplate przechowuje informacje o jeden otwarty dokument.Dla aplikacji MDI, klasa CMultiDocTemplate przechowuje listę ( CPtrList) z aktualnie otwarte dokumenty utworzone na podstawie tego szablonu.CDocTemplate::AddDocumenti CDocTemplate::RemoveDocument przewidują członka wirtualnego funkcji Dodawanie lub usuwanie dokumentu z szablonu.CDocTemplatejest przyjaciel CDocument , możemy ustawić chronione CDocument::m_pDocTemplate kursor wstecz Powrót do szablonu dokumentu, który utworzył dokument.
CWinAppDomyślnie obsługuje OnFileOpen wykonania, które z kolei będą sprawdzać wszystkie szablony doc.Wdrożenie obejmuje szuka już otwarte dokumenty i podejmowaniu decyzji, jakiego formatu do otwierania nowych dokumentów w.
CDocTemplatezarządza powiązania interfejsu użytkownika dla dokumentów i ramek.
CDocTemplateZlicza liczbę dokumentów bez nazwy.
CDocument
A CDocument jest własnością CDocTemplate.
Dokumenty mają listę aktualnie otwarte widoki (pochodzące z CView) który oglądasz dokument ( CPtrList).
Dokumenty nie tworzyć/niszczą widoków, ale są dołączone do siebie po ich utworzeniu.Po zamknięciu dokumentu (to znaczy do pliku/Zamknij), we wszystkich widokach dołączone zostaną zamknięte.Po zamknięciu ostatni widok dokumentu (to znaczy, zamknij okno /) dokument zostanie zamknięty.
CDocument::AddView, RemoveView Interfejs jest używany do przechowywania listy widoku.CDocument jest przyjaciel CView , możemy ustawić CView::m_pDocument wskaźnik Wstecz.
CFrameWnd
A CFrameWnd (Ramka) odgrywa tę samą rolę, jak w MFC 1.0, ale teraz CFrameWnd klasy jest przeznaczony do użytku w wielu przypadkach bez wynikających nowej klasy.Klasy pochodne CMDIFrameWnd i CMDIChildWnd są również rozszerzany tak wiele standardowych poleceń są już realizowane.
CFrameWnd Jest odpowiedzialny za tworzenie systemu windows w obszarze klienckim ramki.Normalnie jest jedno okno główne wypełnianie obszaru klienta ramki.
Dla okna MDI ramki obszaru klienckiego jest wypełniona kontroli MDICLIENT, który z kolei jest elementem nadrzędnym wszystkich okien ramek podrzędnych MDI.Okno programu SDI ramkę lub okno potomne MDI ramki obszaru klienckiego jest zwykle wypełniona CView-pochodnych obiektu window.W odniesieniu do CSplitterWnd, obszaru klienta widoku jest wypełniona CSplitterWnd obiektu window i CView-obiekty pochodne okna (po jednym na okienka Podziel) są tworzone jako okien podrzędnych z CSplitterWnd.