Klasa CWnd zapewnia podstawowe mechanizmy niezbędne do prawidłowego
funkcjonowania wszystkich klas "okienkowych" biblioteki MFC.
Nie należy obiektów tej klasy utożsamiać wprost z pojęciem okna
w rozumieniu systemu Windows, jednak oba te pojęcia są blisko związane.
Obiekt klasy CWnd jest tworzony za pomocą swojego konstruktora,
a usuwany za pomocą destruktora. Nieco inaczej wygląda to w przypadku okienek
systemu Windows. Okno w rozumieniu systemu Windows nie jest bowiem obiektem,
lecz jedynie pewną strukturą danych. Struktura ta może być utworzona za
pomocą metody Create() klasy CWnd, a usunięta przez domyślny destruktor
lub specjalną metodę DestroyWindow(). Jak więc widać, klasa CWnd jest niejako
pewną funkcjonalną otoczką dla struktury okna systemu Windows. Z takiego
podejścia wynika wniosek, iż struktura okna Windows musi być pewną
składową klasy CWnd. Tak też jest w rzeczywistości.
Osobnego omówienia wymaga sposób obsługi komunikatów realizowany przez
klasę CWnd. Zastosowany tutaj mechanizm mapowania komunikatów (ang. message-map)
w znacznym stopniu upraszcza pracę programisty. Nadchodzące od systemu
operacyjnego komunikaty są bowiem automatycznie rozsyłane do odpowiednich
metod składowych klasy CWnd. Przyjęto tutaj zasadę stosowania jednolitego
nazewnictwa, dlatego też wszystkie funkcje odpowiadające na komunikaty
mają nazwę: OnXxxxx() gdzie Xxxxx oznacza nazwę odpowiedniego
komunikatu. Pokrywając te metody klasy CWnd w klasach potomnych programista
może w prosty sposób zapewnić odpowiednią reakcję obiektu na nadchodzące
komunikaty.
Tworzenie obiektów klasy CWnd jest proste:
- najpierw należy wywołać standardowy konstruktor klasy
- następnie za pomocą wywołania metody Create() utworzyć systemową strukturę
okna i automatycznie podłączyć ją do obiektu klasy CWnd
Okna związane z obiektami klasy CWnd usuwane są automatycznie
przez destruktor klasy, można także zrobić to ręcznie, używając metody
DestroyWindow().
Wiele klas należących do biblioteki MFC dziedziczy właściwości po klasie
CWnd. Wnoszą one dodatkowe możliwości, dokonując pewnego uszczegółowienia.
Niektóre spośród tych klas, jak np. CView,
CFrameWnd czy
CDialog
zostały zaprojektowane z myślą o dalszym dziedziczeniu, inne zaś, jak np.
CButton są w większości przypadków wykorzystywane
bezpośrednio.
| Metody |
Opis |
| Create | Tworzy okno systemu Windows i dołącza je do
obiektu klasy CWnd. Jako parametry wywołania pobiera nazwę klasy, na podstawie
której utworzyć okno, nazwę samego okna, atrybuty jego stylu, położenie i
rozmiar (liczone względem okna - rodzica), uchwyt do okna rodzica oraz
numer ID tworzonego okna. |
| PreCreateWindow | Wywoływana automatycznie przez
środowisko w momencie poprzedzającym utworzenie okna. Nigdy
nie należy wywoływać tej metody wprost. Pokrycie jej umożliwia
modyfikację parametrów tworzonego okna przekazywanych w strukturze
CREATESTRUCT zanim okno zostanie utworzone. |
| CalcWindowRect | Metoda wyznacza rozmiar okna na podstawie
rozmiaru pożądanego obszaru wewnątrz okna. Mówiąc obrazowo, jeśli tworzymy
okno o danym rozmiarze, rozmiar jego przestrzeni roboczej (ang. client rectangle)
jest oczywiście mniejszy od rozmiaru samego okna ze względu na ramki, pasek
z nagłówkiem i inne elementy. Jeśli zależy nam na tym, by obszar
wewnątrz okna miał ściśle określony rozmiar, wtedy używamy tej metody
by wyznaczyć wielkość tworzonego okna. |
| GetStyle | Zwraca styl okna (typu DWORD). |
| GetExStyle | Zwraca tzw. rozszerzony styl okna
(typu DWORD). |
| Attach | Łączy strukturę okna systemu Windows z obiektem
klasy CWnd. Fizycznie przypisuje atrybutowi m_HWnd uchwyt
przekazany jako parametr. |
| Detach | Odłącza strukturę okna systemu Windows
od obiektu klasy CWnd i zwraca uchwyt tej struktury. |
| PreSubclassWindow | Wywoływana automatycznie przez
środowisko w momencie poprzedzającym dołączenie struktury okna metodą
SubclassWindow(). Pokrycie jej umożliwia przeprowadzenie
dodatkowych czynności poprzedzających dołączenie struktury (np.
dołączenie kontrolek dialogu). Metoda do zaawansowanych zastosowań. |
| SubclassWindow | Łączy strukturę okna systemu Windows
z obiektem klasy CWnd w sposób dynamiczny. Połączenie takie
powoduje, iż wszystkie komunikaty przechodzą najpierw przez wewnętrzną
mapę komunikatów obiektu CWnd, ponieważ funkcja WndProc() okna
zostaje zastąpiona funkcją klasy CWnd. |
| UnsubclassWindow | Odłącza podłączoną dynamicznie
strukturę okna. Przywraca oryginalną procedurę obsługi WndProc(). |
| FromHandle | Zwraca wskaźnik do obiektu klasy CWnd, z którym
związane jest okno identyfikowane przez uchwyt przekazany jako parametr.
Jeśli okno nie jest związane z żadnym obiektem, obiekt taki jest tworzony
i zwracany jest wskaźnik do niego.
Uwaga: zwracany wskaźnik ma charakter tymczasowy, nie należy go przechowywać. |
| FromHandlePermanent | Zwraca wskaźnik do obiektu klasy CWnd, z którym
związane jest okno identyfikowane przez uchwyt przekazany jako parametr.
Jeśli okno nie jest związane z żadnym obiektem zwraca NULL. |
| DeleteTempMap | Wywoływana automatycznie przez metodę
obsługi wolnego czasu aplikacji (ang. idle time handler) obiektu
CWinApp. Usuwa tymczasowe obiekty CWnd utworzone metodą
FromHandle(). |
| GetSafeHwnd | Zwraca uchwyt okna związanego z danym
obiektem klasy CWnd. Jeśli obiekt nie jest związany z żadnym oknem zwraca
NULL. Jeśli wskaźnik na obiekt CWnd wynosi NULL, bezpiecznie
zwraca NULL. |
| CreateEx | Tworzy okno systemu Windows i dołącza je
do obiektu klasy CWnd. W odróżnieniu od metody Create()
pozwala użyć informacji o rozszerzonym stylu okna. Zalecane jest
stosowanie tej właśnie metody. |
| CreateControl | Tworzy kontrolkę OLE, która w programie
będzie reprezentowana przez obiekt dziedziczący po CWnd. |
| Metody |
Opis |
| IsWindowEnabled | Określa, czy okno jest aktywne, tzn.
czy reaguje na zdarzenia związane z myszą i klawiaturą. |
| EnableWindow | Włącza lub wyłącza aktywność
danego okna. Stosowane najczęściej w przypadku kontrolek
w oknach dialogowych. |
| GetActiveWindow | Zwraca wskaźnik do aktualnie
aktywnego okna. |
| SetActiveWindow | Czyni okno aktywnym.
Uwaga: należy używać ze szczególną ostrożnością. |
| GetCapture | Zwraca wskaźnik do okna, które
zawłaszczyło mysz. |
| SetCapture | Zawłaszcza mysz. Powoduje to, że
wszystkie zdarzenia myszy będą przekazywane do tego okna, niezależnie
od położenia wskaźnika na ekranie.
Uwaga: używać ostrożnie, pamiętać o zwolnieniu myszy metodą
ReleaseCapture(). |
| GetFocus | Zwraca wskaźnik do okna, które aktualnie
ma ognisko. |
| SetFocus | Przejmuje ognisko. Okno, na rzecz
którego została aktywowana ta metoda, otrzymuje ognisko.
Uwaga: używać tylko w razie konieczności zmiany sposobu
sterowania przekazywaniem ogniska w systemie Windows. |
| GetDesktopWindow | Zwraca wskaźnik do okna
pulpitu Windows. |
| GetForegroundWindow | Zwraca wskaźnik do okna najbliższego
użytkownikowi, czyli najczęściej tego, z którym użytkownik aktualnie
pracuje. |
| SetForegroundWindow | Ustawia okno przed wszystkimi innymi
oknami i uaktywnia je. Metoda ma zastosowanie wyłącznie do typowych
okien z ramką i okien dialogowych. |
| GetIcon | Zwraca wskaźnik do ikony danego okna lub NULL. |
| SetIcon | Dodaje do okna nową ikonę. Gdy okno jest zarejestrowane,
metoda służy do wyboru aktualnie używanej ikony. |
| GetWindowContextHelpID | Zwraca numer kontekstu pliku pomocy
związanego z oknem lub 0 jeśli nie określono. |
| SetWindowContextHelpID | Ustawia numer kontekstu pliku pomocy
związany z danym oknem.
Uwaga: Jeśli okno nie ma ustawionego indywidualnie numeru kontekstu pomocy,
dziedziczy ten numer po oknie, do którego należy. Jest to prosty mechanizm
umożliwiający np. ustawienie jednego numeru kontekstu pomocy dla okna
dialogowego i pominięcie go w oknach kontrolek. |
| ModifyStyle | Pozwala na modyfikację stylu okna. |
| ModifyStyleEx | Pozwala na modyfikację rozszerzonego stylu okna. |
| Metody |
Opis |
| GetWindowPlacement | Zwraca strukturę WINDOWPLACEMENT
związaną z danym oknem. Struktura ta zawiera informacje o aktualnum stanie
okna, oraz o rozmiarach okna w pozycji normalnej, zminimalizowanej i
zmaksymalizowanej. |
| SetWindowPlacement | Ustawia strukturę rozmiarów okna
WINDOWPLACEMENT. |
| GetWindowRgn | Zwraca obszar okna, w którym
system operacyjny zabrania rysować. |
| SetWindowRgn | Ustawia obszar okna, po którym
rysuje system operacyjny. |
| IsIconic | Zwraca TRUE jeśli okno jest zminimalizowane. |
| IsZoomed | Zwraca TRUE jeśli okno jest zmaksymalizowane. |
| MoveWindow | Zmienia pozycję i rozmiar okna na ekranie.
Wysyła komunikat WM_GETMINMAXINFO aby sprawdzić, czy nowe
wymiary mieszczą się w ustalonym przedziale. |
| SetWindowPos | Zmienia pozycję i rozmiar okna na ekranie.
Dodatkowo pozwala umieścić okno w określonym miejscu tzw. Z-porządku, czyli
łańcucha kolejnych okien na ekranie. |
| ArrangeIconicWindows | Układa wszystkie zminimalizowane
okna - dzieci, których ikony znajdują się w danym oknie.
Wskazówka: można zastosować do układania ikon na pulpicie Windows.
Uwaga: do układania ikon okienek MDI lepiej użyć metody
CMDIFrameWnd::MDIIconArrange(). |
| BringWindowToTop | Ustawia okno z przodu w Z-porządku. |
| GetWindowRect | Zwraca położenie i całkowity rozmiar okna
na ekranie, włączając paski tytułu, ramki itp. Wymiary podane są względem ekranu. |
| GetClientRect | Zwraca rozmiar obszaru roboczego okna,
czyli wnętrze okna przeznaczone do interakcji z użytkownikiem. Górny lewy
róg ma zawsze współrzędne (0,0). |
| Metody |
Opis |
| ChildWindowFromPoint | Sprawdza do którego z okien potomnych
należy punkt podany jako parametr. Jeśli do żadnego - zwraca NULL. |
| FindWindow | Zwraca najbliższe od góry okno o podanej
nazwie i nazwie klasy. Nie sprawdza okien potomnych. |
| GetNextWindow | Zwraca następne (lub poprzednie) okno
w kolejności. Jeśli okno, na rzecz którego aktywowano metodę jest oknem
potomnym, przeszukiwane są okna potomne tego samego rodzica. |
| GetOwner | Zwraca wskaźnik do okna - właściciela.
Uwaga: Nie należy mylić pojęć okna rodzica i okna właściciela. Okno
rozdic ma okna potomne, które są rysowane tylko w jego obszarze roboczym,
natomiast okno właściciel może być właścicielem dowolnego innego okna. |
| SetOwner | Ustawia właściciela okna. Domyślnym
właścicielem jest okno rodzica. Okno właściciel może otrzymywać od
podległego sobie okna komunikaty. |
| GetTopWindow | Zwraca wskaźnik do najbardziej wysuniętego do
przodu okna potomnego. Jeśli okno nie ma okien potomnych, zwraca NULL. |
| GetWindow | Uniwersalna metoda zwracająca wskaźnik
do okna danego parametrem, np. do pierwszego okna potomnego, do okna
właściciela, itp. |
| GetLastActivePopup | Zwraca wskaźnik do ostatnio aktywnego
okna potomnego. |
| IsChild | Zwraca TRUE jeśli okno jest potomkiem innego. |
| GetParent | Zwraca wskaźnik do okna rodzica lub NULL. |
| GetSafeOwner | Zwraca wskaźnik na okno właściciela. |
| SetParent | Zmienia rodzica okna. |
| WindowFromPoint | Sprawdza do którego z okien
należy dany punkt. Jeśli do żadnego - zwraca NULL. |
| GetDlgItem | Zwraca wskaźnik do kontrolki w oknie (najczęściej
dialogowym) danej numerem. |
| GetDlgCtrlID | Zwraca numer ID okna (najczęściej kontrolki). |
| SetDlgCtrlID | Ustawia nowy numer ID dla okna. |
| GetDescendantWindow | Zwraca wskaźnik do okna
o danym numerze ID. Przeszukiwane jest całe drzewo okien potomnych. |
| GetParentFrame | Zwraca okno rodzica, które
jest ramką, czyli oknem typu CFrameWnd
lub dziedziczącym. |
| SendMessageToDescendants | Rozsyła komunikat do okien potomnych. |
| GetTopLevelParent | Zwraca okno rodzica najbardziej wysunięte do przodu. |
| GetTopLevelOwner | Zwraca okno właściciela najbardziej wysunięte do przodu. |
| GetParentOwner | Zwraca wskaźnik do okna rodzica,
które nie jest potomkiem innego okna. Jeśli trzeba, cofa się w głąb
drzewia okien. |
| GetTopLevelFrame | Zwraca wskaźnik do najbliższego okna
typu CFrameWnd lub dziedziczącego. |
| UpdateDialogControls | Funkcja uaktualnia stan
kontrolek obsługujących mechanizm ON_UPDATE_COMMAND_UI. |
| UpdateData | Metoda wywoływana automatycznie przez środowisko
w celu wymiany danych między kontrolkami okna dialogowego a powiązanymi z nimi
zmiennymi. Można wywołać ją w celu wymuszenia przesłania danych. Jeśli jako
argument podamy TRUE, dane wędrują z kontrolek ekranowych do zmiennych,
jeśli podamy FALSE, ze zmiennych do kontrolek na ekran. |
| CenterWindow | Ustawia okno centralnie względem okna rodzica. |
| Metody |
Opis |
| BeginPaint | Przygotowuje okno do rysowania po obszarze
roboczym. Zwraca wskaźnik kontekstu urządzenia
CDC oraz wypełnia
strukturę informacji o rysowaniu PAINTSTRUCT.
Struktura zawiera między innymi informację o rozmiarze najmniejszego
prostokąta niezbędnego do przerysowania, w wyniku np. zasłonięcia
okna przez inne okno.
Uwagi:
- nie należy wywoływać metody w sytuacji innej niż odpowiedź na komunikat
WM_PAINT
- każde wywołanie metody musi być związane z wywołaniem metody
EndPaint() kończącej rosowanie i zwalniającej zasoby
- nie należy przechowywać zwracanego kontekstu urządzenia, gdyż ma on
charakter tymczasowy |
| EndPaint | Kończy proces rysowania w obszarze roboczym okna,
zwalnia przydzielone zasoby. |
| Print | Metoda wywoływana w celu narysowania zawartości
okna na innym kontekście, najczęściej chodzi o kontekst drukarki. |
| PrintClient | Metoda rusyje wszystkie okna potomne
w padanym kontekście, najczęściej jest to kontekst drukarki. |
| LockWindowUpdate | Blokuje możliwość rysowania w danym oknie.
Gdy aplikacja wywoła funkcję żądającą kontekstu urządzenia,
otrzyma kontekst o pustym obszarze roboczym. |
| UnlockWindowUpdate | Odblokowuje możliwość
rysowania w oknie. |
| GetDC | Zwraca kontekst urządzenia z pomocą którego
należy rysować po obszarze roboczym okna.
Uwaga: Każdy przydzielony kontekst należy zwolnić metodą ReleaseDC(). |
| GetDCEx | Zwraca kontekst urządzenia, udostępnia możliwość
wpływu na obszar obcinania w danym kontekscie. Dla zaawansowanych. |
| RedrawWindow | Przerysowuje wskazany fragment okna. |
| GetWindowDC | Zwraca kontekst urządzenia do rysowania
po całym obszarze okna, włączając pasek nagłówka, ramki, itp. |
| ReleaseDC | Uwalnia przydzielony kontekst urządzenia. |
| UpdateWindow | Wysyła komunikat WM_PAINT z poleceniem
przerysowania zawartości okna. |
| SetRedraw | Ustawia flagę przerysowywania okna. Kiedy flaga
jest wyłączona, zawartość okna nie jest przerysowywana do czasu ponownego włączenia flagi.
Metoda jest często wykorzystywana podczas wypełniania okien zawartością, np.
list ciągami znaków. Aby dany element nie "migotał", można na czas
dodawania elementów wyłączyć przerysowywanie. |
| GetUpdateRect | Zwraca współrzędne najmniejszego prostokąta
zawierającego region wymagający przerysowania. |
| GetUpdateRgn | Zwraca region wymagający przerysowania.
Uwaga: wywołanie metody BeginPaint() automatycznie
usuwa unieważniony region, więc metoda zwróci region pusty. |
| Invalidate | Unieważnia całą zawartość obszaru roboczego okna.
Parametr wywołania informuje system o tym, czy automatycznie wyczyścić
zawartość unieważnionego obszaru w momencie wywołania metody
BeginPaint(). |
| InvalidateRect | Unieważnia podany w wywołaniu prostokąt
dodając jego rozmiar do regionu unieważnionego okna. |
| InvalidateRgn | Unieważnia podany w wywołaniu region
dodając jego rozmiar do regionu unieważnionego okna. |
| ValidateRect | Anuluje unieważnienie wskazanego prostokąta.
Faktycznie odejmuje prostokąt od regionu unieważnionego okna. |
| ValidateRgn | Anuluje unieważnienie wskazanego regionu.
Faktycznie odejmuje prostokąt od regionu unieważnionego okna. |
| ShowWindow | Ustawia widoczność okna w zależności od
podanego parametru. Okno może pojawić się w stanie normalnym, zminimalizowanym,
zmaksymalizowanym lub może zostać ukryte. |
| IsWindowVisible | Zwraca TRUE jeśli dane okno jest widoczne
na ekranie (niezależnie od tego, czy jest przysłonięte przez inne okna). |
| ShowOwnedPopups | Pokazuje lub ukrywa wszystkie okna,
których właścicielem jest dane okno. |
| EnableScrollBar | Auktywnia lub blokuje jedną lub obie strzałki
na dowolnym pasku przewijania okna. |