TN025: Dokument, widok i tworzenia ramki
[!UWAGA]
Następujące Uwaga techniczna została zaktualizowana, ponieważ najpierw została uwzględniona w dokumentacji online.W rezultacie niektóre procedur i tematów może być nieaktualne lub nieprawidłowe.Najnowsze informacje zaleca się wyszukać temat zainteresowanie Indeks dokumentacji online.
Uwaga ta opisuje zagadnienia tworzenie i własności WinApps, DocTemplates, dokumenty, ramek i widoków.
WinApp
Istnieje CWinApp obiektu w systemie.
Jest statycznie zbudowane i zainicjować poprzez wdrożenie wewnętrznego w ramach WinMain.Muszą pochodzić od CWinApp do niczego przydatnego (wyjątek: biblioteki DLL rozszerzenia nie powinny mieć CWinApp instancji — inicjowania odbywa się w DllMain zamiast).
To CWinApp obiekt posiada listę szablonów dokumentu ( CPtrList).Istnieje jeden lub więcej szablon dokumentu, na wniosek.DocTemplates są zazwyczaj ładowane z pliku zasobów (to znaczy tablicę ciągów) w CWinApp::InitInstance.
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
To CWinApp obiektu jest właścicielem wszystkich okien ramki w aplikacji.Okno główne ramki dla aplikacji powinny być przechowywane w CWinApp::m_pMainWnd; zwykle wartość m_pMainWnd w InitInstance wykonania, jeśli nie ma pozwolić AppWizard dla Ciebie zrobić.Jednolity dokument interfejsu (SDI) jest to jeden CFrameWnd jako ramka okna głównego, jak również tylko ramki okna dokumentu.Dla interfejsu wielu dokumentów (MDI) jest to ramka MDI (klasy CMDIFrameWnd) służy jako ramka okna głównego zawierającego wszystkie podrzędne CFrameWnds.Każde okno podrzędne jest klasy CMDIChildWnd (pochodzące z CFrameWnd) i służy jako potencjalnie wiele okien ramce dokument.
DocTemplates
CDocTemplate Jest twórcę i Menedżer dokumentów.Dokumenty, które tworzy jest właścicielem.Jeśli aplikacja wykorzystuje podejście opartych na zasobach opisane poniżej, nie będzie konieczne z CDocTemplate.
Dla aplikacji SDI klasy CSingleDocTemplate przechowuje informacje o jeden otwarty dokument.Dla aplikacji MDI klasy 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.CDocTemplateprzyjaciela CDocument , możemy ustawić chronionych CDocument::m_pDocTemplate back wskaźnik, aby wskazać szablon doc, który utworzył dokument.
CWinAppDomyślnie obsługuje OnFileOpen wykonania, które z kolei wysyła kwerendy do wszystkich szablonów doc.Implementacja obejmuje szukasz już otwarte dokumenty i podejmowaniu decyzji, jakiego formatu 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 otwartych widoki (pochodzące z CView) oglądasz dokument ( CPtrList).
Dokumenty nie tworzyć/zniszczyć widoków, ale po ich utworzeniu, są dołączone do siebie.Po zamknięciu dokumentu (to znaczy do pliku/Zamknij), we wszystkich widokach załączone zostaną zamknięte.Po zamknięciu ostatni widok dokumentu (to znaczy, zamknij okno /) dokumentu zostanie zamknięte.
CDocument::AddView, RemoveView Interfejsu jest wykorzystywana do utrzymywania na liście Widok.CDocument przyjaciela CView , możemy ustawić CView::m_pDocument wskaźnik Wstecz.
CFrameWnd
A CFrameWnd (ramki) odtwarza tę samą rolę, jak w wersji 1.0 MFC, ale teraz CFrameWnd klasy jest przeznaczony do użytku w wielu przypadkach bez wynikające z nowej klasy.Klasy pochodne CMDIFrameWnd i CMDIChildWnd są również rozszerzany tak wiele standardowych poleceń są już wdrożone.
CFrameWnd Jest odpowiedzialny za tworzenie systemu windows w obszarze klienckim ramki.Zwykle jest jedno okno główne wypełnianie obszaru klienckiego ramki.
Dla okna MDI ramki obszaru klienta jest wypełniany formant MDICLIENT, który z kolei jest nadrzędny wszystkich okien podrzędnych MDI ramki.Okno SDI ramkę lub okno potomne MDI ramki obszaru klienta jest zazwyczaj wypełniona CView-uzyskane obiektu window.W odniesieniu do CSplitterWnd, obszaru klienta widoku jest wypełniona CSplitterWnd obiekt window i CView-obiekty pochodne okna (jedna na okienka Podziel) są tworzone jako okien podrzędnych z CSplitterWnd.