Zgłębianie indiańskiej duszy jest jak nurkowanie w kowadle – najczęściej boli od tego głowa.

3 CMultiDocTemplate* pDocTemplate; 4 pDocTemplate = new CMultiDocTemplate( O 5 IDR_MDICOITYPE, 6 RUNTIME_CLASS(CMDICoinDoc), 7 RUNTIME_CLASS(CChildFrame), 8 RUNTIME_CLASS(CMDICoinView)) ; 9 AddDocTemplate(pDocTemplate); @ 10 11 // Utwórz główne okno obramowujące MDI 12 CMainFrame* pMainFrame = new CMainFrame; ® 13 if (!pMainFrame->LoadFrame(IDR__MAINFRAME)) 14 return FALSE; O 15 m_pMainWnd = pMainFrame; O Tworzymy egzemplarz szablonu wielodokumentowego i przesyłamy identyfikator zasobów i bieżące klasy (czasu wykonania) jego dokumentu, widoku i okna obramowującego. @ Rejestrujemy nowo utworzony szablon dokumentu wraz z klasą aplikacji. Aplikacje wielodokumentowe 543 © Tworzymy egzemplarz okna obramowującego aplikacji. O Informujemy główne okno obramowujące, który z kompletów zasobów (takich jak menu czy pasek narzędziowy) załadować. Podczas tworzenia obiektu CMultiDocTemplate (linia 4) przesyłane są mu cztery parametry. Pierwszy parametr to identyfikator zasobów IDR_MDICOITYPE (linia 5). Identyfikator ten opisuje trzy różne zasoby związane z dokumentem SMDicoinDoc: ikonę, menu i tablicę łańcuchów. Trzy kolejne parametry są wskaźnikami do informacji czasu wykonania na temat klas dokumentu, okna obramowującego i widoku (pojawiają się odpowiednio w liniach 6, 7 i 8). Do tworzenia tych wskaźników wykorzystywana jest makroinstrukcja RUNTIME_CLASS. Dynamiczne tworzenie tych klas jest możliwe dzięki temu, że kreator AppWizard dołączył do programu obsługujące dynamiczną kreację makroinstrukcje: DECLARE_DYNCREATE i IMPLEMENT_DYNCREATE. Pomiędzy szablonami dokumentów w aplikacjach SDI i MDI jest kilka istotnych różnic. Obie klasy CSingleDocTemplate i CMultiDocTemplate wywodzą się z tej samej klasy bazowej CDocTemplate. Jednak podczas gdy klasa CSingleDocTemplate obsługuje tylko jeden obiekt dokumentu, klasa CMultidocTemplate obsługuje listę wskaźników do dokumentów (tutaj obiektów CMDlCoinDoc). Obiekty dokumentu, widoku i okna obramowującego nie są jeszcze w tym momencie tworzone. Przedstawiony fragment kodu inicjalizuje obiekt CMultiDocTemplate, zapełniając go informacjami potrzebnymi do załadowania zasobów oraz alokowania na żądanie w pamięci dokumentów, widoków i okien obramowujących. Klasa aplikacji przechowuje listę szablonów dokumentów. Przyzywana w linii 9 funkcja AddDocTemplate dodaje do tej listy nowy obiekt. Funkcję tę wzywamy za każdym razem, gdy chcemy zarejestrować nowe szablony dokumentów. W ten sposób pojedyncza aplikacja może obsługiwać różne rodzaje powiązań między dokumentem, widokiem a oknem obramowującym. Okno dialogowe New Document Jeśli w klasie aplikacji zarejestrowany jest więcej niż jeden typ dokumentu, wybranie w menu File polecenia New wywoła okno dialogowe pytające jakiego rodzaju dokument chcemy otworzyć. Opis wyświetlony w oknie zaczerpnięty jest z odpowiedniego dla tego dokumentu (z właściwym mu identyfikatorem IDR_) pola tablicy łańcuchów. Klasa CWinApp podtrzymuje obiekt CMultiDocTemplate, dopóki sama nie zostanie zniszczona, czyli dopóki aplikacja nie zostanie wyłączona. Podczas niszczenia klasy cwi-nApp pamięć oczyszczana jest z szablonów dokumentu, o ile oczywiście zostały one doda- 544_____________________________________Poznaj Visual C++ 6 ne za pomocą funkcji AddDocTemplate. Szablony dokumentów zajmują bardzo niewiele pamięci, dlatego przechowywanie ich przez cały czas życia aplikacji nie jest dużym obciążeniem dla systemu. W linii 12 za pomocą konstruktora CMainFrame tworzone jest główne okno obramo-wujące. Funkcja LoadFrame przyzywana w linii 13 wykorzystuje jako parametr identyfikator zasobów i podłącza do okna obramowującego zasoby IDR_MAINFRAME. Funkcji LoadFrame można również opcjonalnie przesłać parametr definiujący znaczniki stylów okna. Domyślne style to FWS_ADDTOTITLE i WS_OVERLAPPEDWINDOW. Styl OVERLAPPED-WINDOW łączy w sobie style podane w tabeli 21.1. Znacznik FWS_ADDTOTITLE jest specyficzny dla biblioteki MFC i sprawia, że nazwa aktywnego dokumentu jest wyświetlana na pasku tytułowym. Normalnie na pasku tytułowym wyświetlana jest najpierw nazwa apli- kacji, a po niej nazwa aktywnego dokumentu. Porządek ten można odwrócić za pomocą znacznika FWS_PREFIXTITLE. Tabela 21.1

Tematy

  • ZgĹ‚Ä™bianie indiaĹ„skiej duszy jest jak nurkowanie w kowadle – najczęściej boli od tego gĹ‚owa.
  • Jeśli takie metody, takie wyobrażanie sobie, uważane są za algorytmy, to są to bardzo szczególne algorytmy — zorganizowane nie algebraicznie, ale przestrzennie, jako...
  • Na płaskorzeźbie władca perski Szapur l (panował 243-273) przedstawiony jako pogromca trzech cesarzy rzymskich: Gordiana III (Marcus Antonius Gordianus, panował...
  • Wedle prawa musiano winnego wydać ojcu chłopca, ale to mogło nastąpić dopiero za tydzień, gdyż handlarz jako gość miał przez czternaście dni być pod naszą opieką...
  • Ponieważ leżałem na koi zwrócony stopami ku rufie, przy każdym takim zawahaniu moja głowa wbijała się mocniej w poduszkę, co wcale nie sprawiało mi przyjemności, jako że ta...
  • SBowianofile stawiali swój kult dla tradycji, wspólnoty gminnej jako formy bytu spoBecznego oraz prawosBawia rosyjskiego ponad warto[ciami racjonalistycznymi, indywidualizmem, logik
  • Osoba ludzka traktowana jako całość to warunek osiągnięcia pełnego zdrowia, po zaspokojeniu wszystkich potrzeb tak rozumianej całości...
  • I płakała tak bezwolnie i prawie bezboleśnie, jako to drzewo, obciążone kwiatem w wiośniane poranki, kiej słońce przygrzeje, a wiatry zakolebią, rosi obficie, wpiera się w...
  • Po zawieszeniu broni z Francją rozkazał bowiem, aby jako pierwszy eksponat ustawiono tam wagon restauracyjny, w którym przypieczętowana została klęska Niemiec w roku 1918 i...
  • W postaci Chrystusa ludzie uwznioślili i uczynili „boską" miłość, rozumianą jako bezinteresowne pragnienie dobra dla przedmiotu miłości...
  • Dusza bowiem jako forma nie jest urzeczywistnieniem skierowanym do dalszego urzeczywistnienia, ale jest ostatnim kresem [ biologicznego] powstawania czBowieka