Okna nadrzędne klasa CFrameWnd
|
|
-
-
Okna nadrzędne (frame
windows) są to okna, których funkcjonalność
została rozszerzona o zawieranie innych okien w sobie
-
Klasy obsługi okien nadrzędnych
są dziedziczone z klasy CWnd
i zawierają pełną funkcjonalność obiektów
okien w MFC
-
obiekty okien nadrzędnych
w MFC są dołączone do okien Windows, tak jak
to miało miejsce w przypadku obiektów klasy CWnd
-
także dla tych obiektów
obowiązuje ograniczenie, że jeden obiekt klasy może
być dołączony co najwyżej do jednego
okna Windows
-
sposób tworzenia, używania
i niszczenia obiektów okien nadrzędnych jest niemal
taki sam, jak w przypadku obiektów zwykłych okien (CWnd)
- jedyną różnicą jest
zastrzeżenie, żeby obiektów okien nadrzędnych
nie niszczyć stosując operator delete, lecz
metodę CWnd::DestroyWindow, w obsłudze której
znajdzie się wywołanie delete this
-
W oknach nadrzędnych w wyraźny
sposób oddzielone są od siebie okno i jego zawartość
-
w aplikacjach typu dokument/widok
zawartością takich okien są najczęściej
widoki dołączone do
swoich dokumentów
- w takim przypadku okno nadrzędne jest tylko otoczką
zawierającą widok
- daje widokowi obramowanie okna, pasek tytułowy (caption
bar) i obsługę standardowego menu okna
- za zarządzanie obszarem roboczym (client area)
okna nadrzędnego odpowiada całkowicie widok
-
najczęściej
programista całą obsługę okna nadrzędnego
pozostawia systemowi Windows (zmiana pozycji, rozmiaru,
zamykanie), natomiast musi się sam zatroszczyć o
obsługę zawartości okna
[początek strony]
-
-
Daje funkcjonalność okna
nadrzędnego dla aplikacji SDI (Single Document Interface)
-
Każda klasa bezpośrednio
dziedzicząca z CFrameWnd musi być zadeklarowana z
użyciem makra DECLARE_DYNCREATE,
co umożliwia dynamiczne tworzenie obiektów podczas
wykonywania programu
-
Istnieją trzy sposoby
tworzenia okien nadrzędnych klasy CFrameWnd
-
- utworzyć obiekt klasy
- ewentualnie zarejestrować specjalną klasę dla
okna przy pomocy funkcji AfxRegisterWndClass
- utworzyć okno w systemie Windows przy pomocy metody
CWnd::Create albo CWnd::CreateEx
-
- utworzyć obiekt klasy
- wywołać metodę CFrameWnd::LoadFrame,
stworzy okno w Windows i dołączy do niego wczytane
zasoby (menu, tablicę akceleratorów, ikonę, tytuł
okna)
-
trzecim sposobem, który, w
przeciwieństwie do dwóch pierwszych, jest sposobem pośrednim,
jest zdefiniowanie wzorca
dokumentu
- daje to możliwość automatycznego tworzenia
okna nadrzędnego na początku pracy aplikacji (w
aplikacji SDI istnieje zawsze jedno i tylko jedno okno nadrzędne)
- na podstawie wzorca dokumentu tworzone są dokumenty i
ich widoki
-
Dodatkowa funkcjonalność
klasy CFrameWnd (w porównaniu z klasą CWnd)
-
zapamiętywanie aktywnego
widoku
-
przekierowanie komunikatów (messages)
i poleceń (commands) do aktywnego widoku
-
obsługa ustawienia
wszystkich okien potomnych (widoków i control
bars)
-
uaktualnienie stanu kontrolek
na control bars
-
uaktualnienie stanu pozycji
menu przed jego rozwinięciem
-
obsługa akceleratorów
-
obsługa mechanizmu drag
& drop plików
-
jeśli jest to główne
okno aplikacji (CWinApp::m_pMainWnd),
użytkownik zostanie ostrzeżony przy próbie
zamykania niezapisanego dokumentu
[początek strony]
-
-
Daje funkcjonalność głównego
okna nadrzędnego (main frame window) dla całej
aplikacji MDI (Multi Document Interface)
-
Klasy dziedziczące z CMDIFrameWnd
nie muszą być deklarowane z użyciem makra DECLARE_DYNCREATE
(mimo że dziedziczą pośrednio z CFrameWnd,
gdzie taki wymóg istnieje)
-
Tworzenie okna nadrzędnego
klasy CMDIFrameWnd
-
utworzyć obiekt,
ewentualnie zarejestrować nową klasę okna, wywołać
metodę CMDIFrameWnd::Create albo CMDIFrameWnd::LoadFrame
-
nadrzędne okno aplikacji
ma nie żadnego powiązania z dokumentami, dlatego nie
może być tworzone w pośredni sposób przy
pomocy wzorca dokumentu
-
Dodatkowa funkcjonalność
klasy CMDIFrameWnd (w porównaniu z klasą CFrameWnd)
-
pełna obsługa okna MDICLIENT
- ta obsługa jest niewidoczna dla programisty, nawet
style WS_HSCROLL i WS_VSCROLL są podawane
podczas tworzenia okna CMDIFrameWnd, chociaż będą
obowiązywały dla okna MDICLIENT
- okno MDICLIENT jest oknem potomnym okna CMDIFrameWnd
- wszystkie widoki dokumentów są oknami potomnymi
okna MDICLIENT
-
standardowa obsługa ułożenia
okien roboczych w aplikacji MDI (dzielony, kaskadowy,
rozmieszczenie ikon)
-
dwa rodzaje menu
- gdy nie ma żadnego widoku dokumentu ustawiane jest domyślne
menu okna nadrzędnego
- gdy jest widok ustawiane jest menu tego widoku
[początek strony]
-
-
Daje funkcjonalność okna
nadrzędnego dla widoków dokumentu w aplikacji MDI (Multi
Document Interface)
-
Są takie same sposoby
tworzenia okien klasy CMDIChildWnd jak obiektów klasy CFrameWnd
-
Dodatkowa funkcjonalność
klasy CMDIChildWnd (w porównaniu z klasą CFrameWnd)
-
przy stosowaniu wzorców
dokumentów dla aplikacji MDI (czyli klasy CMultiDocTemplate)
wiele obiektów klasy CMDIChildWnd dzieli to samo
menu, co daje oszczędność zasobów Windows
-
menu aktywnego okna potomnego (widoku)
zamienia menu głównego okna nadrzędnego aplikacji
-
aktywne okno potomne (widok)
zmienia tytuł głównego okna nadrzędnego
aplikacji
[początek strony]
-
-
Daje funkcjonalność okna
nadrzędnego dla okien o zmniejszonej wysokości paska
tytułowego (caption bar)
-
Zwykle są stosowane dla toolbars,
gdy mają się pojawić w oddzielnym okienku (niezadokowane,
czyli nieprzyklejone do okna nadrzędnego)
-
Nie mają przycisków
minimalizacji i maksymalizacji okna oraz menu okna
-
Sposób tworzenie:
[początek strony]
[początek strony]
|