img/mfc2.jpg

CWnd


Opis

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.

Atrybuty

Atrybuty Opis
m_hWndPrzechowuje uchwyt (ang. handle) do struktury okna systemu Windows.

Metody

Konstruowanie, usuwanie

Metody Opis
CWndTworzy obiekt typu CWnd
DestroyWindowUsuwa strukturę okna systemu Windows związaną z danym obiektem klasy CWnd.

Inicjalizacja

Metody Opis
CreateTworzy 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.
PreCreateWindowWywoł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.
CalcWindowRectMetoda 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.
GetStyleZwraca styl okna (typu DWORD).
GetExStyleZwraca 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.
DetachOdłącza strukturę okna systemu Windows od obiektu klasy CWnd i zwraca uchwyt tej struktury.
PreSubclassWindowWywoł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.
UnsubclassWindowOdłącza podłączoną dynamicznie strukturę okna. Przywraca oryginalną procedurę obsługi WndProc().
FromHandleZwraca 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ć.
FromHandlePermanentZwraca 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.
DeleteTempMapWywoływana automatycznie przez metodę obsługi wolnego czasu aplikacji (ang. idle time handler) obiektu CWinApp. Usuwa tymczasowe obiekty CWnd utworzone metodą FromHandle().
GetSafeHwndZwraca 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.
CreateExTworzy 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.
CreateControlTworzy kontrolkę OLE, która w programie będzie reprezentowana przez obiekt dziedziczący po CWnd.

Funkcje stanu okna

Metody Opis
IsWindowEnabledOkreśla, czy okno jest aktywne, tzn. czy reaguje na zdarzenia związane z myszą i klawiaturą.
EnableWindowWłącza lub wyłącza aktywność danego okna. Stosowane najczęściej w przypadku kontrolek w oknach dialogowych.
GetActiveWindowZwraca wskaźnik do aktualnie aktywnego okna.
SetActiveWindowCzyni okno aktywnym.
Uwaga: należy używać ze szczególną ostrożnością.
GetCaptureZwraca wskaźnik do okna, które zawłaszczyło mysz.
SetCaptureZawł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().
GetFocusZwraca wskaźnik do okna, które aktualnie ma ognisko.
SetFocusPrzejmuje 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.
GetDesktopWindowZwraca wskaźnik do okna pulpitu Windows.
GetForegroundWindowZwraca wskaźnik do okna najbliższego użytkownikowi, czyli najczęściej tego, z którym użytkownik aktualnie pracuje.
SetForegroundWindowUstawia okno przed wszystkimi innymi oknami i uaktywnia je. Metoda ma zastosowanie wyłącznie do typowych okien z ramką i okien dialogowych.
GetIconZwraca wskaźnik do ikony danego okna lub NULL.
SetIconDodaje do okna nową ikonę. Gdy okno jest zarejestrowane, metoda służy do wyboru aktualnie używanej ikony.
GetWindowContextHelpIDZwraca numer kontekstu pliku pomocy związanego z oknem lub 0 jeśli nie określono.
SetWindowContextHelpIDUstawia 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.
ModifyStylePozwala na modyfikację stylu okna.
ModifyStyleExPozwala na modyfikację rozszerzonego stylu okna.

Rozmiar i pozycja okna

Metody Opis
GetWindowPlacementZwraca 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.
SetWindowPlacementUstawia strukturę rozmiarów okna WINDOWPLACEMENT.
GetWindowRgnZwraca obszar okna, w którym system operacyjny zabrania rysować.
SetWindowRgnUstawia obszar okna, po którym rysuje system operacyjny.
IsIconicZwraca TRUE jeśli okno jest zminimalizowane.
IsZoomedZwraca TRUE jeśli okno jest zmaksymalizowane.
MoveWindowZmienia pozycję i rozmiar okna na ekranie. Wysyła komunikat WM_GETMINMAXINFO aby sprawdzić, czy nowe wymiary mieszczą się w ustalonym przedziale.
SetWindowPosZmienia 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.
ArrangeIconicWindowsUkł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().
BringWindowToTopUstawia okno z przodu w Z-porządku.
GetWindowRectZwraca położenie i całkowity rozmiar okna na ekranie, włączając paski tytułu, ramki itp. Wymiary podane są względem ekranu.
GetClientRectZwraca 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 dostępu

Metody Opis
ChildWindowFromPointSprawdza do którego z okien potomnych należy punkt podany jako parametr. Jeśli do żadnego - zwraca NULL.
FindWindowZwraca najbliższe od góry okno o podanej nazwie i nazwie klasy. Nie sprawdza okien potomnych.
GetNextWindowZwraca 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.
GetOwnerZwraca 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.
SetOwnerUstawia 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.
GetTopWindowZwraca wskaźnik do najbardziej wysuniętego do przodu okna potomnego. Jeśli okno nie ma okien potomnych, zwraca NULL.
GetWindowUniwersalna metoda zwracająca wskaźnik do okna danego parametrem, np. do pierwszego okna potomnego, do okna właściciela, itp.
GetLastActivePopupZwraca wskaźnik do ostatnio aktywnego okna potomnego.
IsChildZwraca TRUE jeśli okno jest potomkiem innego.
GetParentZwraca wskaźnik do okna rodzica lub NULL.
GetSafeOwnerZwraca wskaźnik na okno właściciela.
SetParentZmienia rodzica okna.
WindowFromPointSprawdza do którego z okien należy dany punkt. Jeśli do żadnego - zwraca NULL.
GetDlgItemZwraca wskaźnik do kontrolki w oknie (najczęściej dialogowym) danej numerem.
GetDlgCtrlIDZwraca numer ID okna (najczęściej kontrolki).
SetDlgCtrlIDUstawia nowy numer ID dla okna.
GetDescendantWindowZwraca wskaźnik do okna o danym numerze ID. Przeszukiwane jest całe drzewo okien potomnych.
GetParentFrameZwraca okno rodzica, które jest ramką, czyli oknem typu CFrameWnd lub dziedziczącym.
SendMessageToDescendantsRozsyła komunikat do okien potomnych.
GetTopLevelParentZwraca okno rodzica najbardziej wysunięte do przodu.
GetTopLevelOwnerZwraca okno właściciela najbardziej wysunięte do przodu.
GetParentOwnerZwraca wskaźnik do okna rodzica, które nie jest potomkiem innego okna. Jeśli trzeba, cofa się w głąb drzewia okien.
GetTopLevelFrameZwraca wskaźnik do najbliższego okna typu CFrameWnd lub dziedziczącego.
UpdateDialogControlsFunkcja uaktualnia stan kontrolek obsługujących mechanizm ON_UPDATE_COMMAND_UI.
UpdateDataMetoda 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.
CenterWindowUstawia okno centralnie względem okna rodzica.

Odświeżanie i rysowanie

Metody Opis
BeginPaintPrzygotowuje 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
EndPaintKończy proces rysowania w obszarze roboczym okna, zwalnia przydzielone zasoby.
PrintMetoda wywoływana w celu narysowania zawartości okna na innym kontekście, najczęściej chodzi o kontekst drukarki.
PrintClientMetoda rusyje wszystkie okna potomne w padanym kontekście, najczęściej jest to kontekst drukarki.
LockWindowUpdateBlokuje możliwość rysowania w danym oknie. Gdy aplikacja wywoła funkcję żądającą kontekstu urządzenia, otrzyma kontekst o pustym obszarze roboczym.
UnlockWindowUpdateOdblokowuje możliwość rysowania w oknie.
GetDCZwraca kontekst urządzenia z pomocą którego należy rysować po obszarze roboczym okna.
Uwaga: Każdy przydzielony kontekst należy zwolnić metodą ReleaseDC().
GetDCExZwraca kontekst urządzenia, udostępnia możliwość wpływu na obszar obcinania w danym kontekscie. Dla zaawansowanych.
RedrawWindowPrzerysowuje wskazany fragment okna.
GetWindowDCZwraca kontekst urządzenia do rysowania po całym obszarze okna, włączając pasek nagłówka, ramki, itp.
ReleaseDCUwalnia przydzielony kontekst urządzenia.
UpdateWindowWysyła komunikat WM_PAINT z poleceniem przerysowania zawartości okna.
SetRedrawUstawia 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.
GetUpdateRectZwraca współrzędne najmniejszego prostokąta zawierającego region wymagający przerysowania.
GetUpdateRgnZwraca region wymagający przerysowania.
Uwaga: wywołanie metody BeginPaint() automatycznie usuwa unieważniony region, więc metoda zwróci region pusty.
InvalidateUnieważ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().
InvalidateRectUnieważnia podany w wywołaniu prostokąt dodając jego rozmiar do regionu unieważnionego okna.
InvalidateRgnUnieważnia podany w wywołaniu region dodając jego rozmiar do regionu unieważnionego okna.
ValidateRectAnuluje unieważnienie wskazanego prostokąta. Faktycznie odejmuje prostokąt od regionu unieważnionego okna.
ValidateRgnAnuluje unieważnienie wskazanego regionu. Faktycznie odejmuje prostokąt od regionu unieważnionego okna.
ShowWindowUstawia widoczność okna w zależności od podanego parametru. Okno może pojawić się w stanie normalnym, zminimalizowanym, zmaksymalizowanym lub może zostać ukryte.
IsWindowVisibleZwraca TRUE jeśli dane okno jest widoczne na ekranie (niezależnie od tego, czy jest przysłonięte przez inne okna).
ShowOwnedPopupsPokazuje lub ukrywa wszystkie okna, których właścicielem jest dane okno.
EnableScrollBarAuktywnia lub blokuje jedną lub obie strzałki na dowolnym pasku przewijania okna.

Przekształcenia współrzędnych

Metody Opis
MapWindowPointsWykonuje konwersję (mapowanie) tablicy punktów. Konwersja jest wykonywana między współrzędnymi jednego okna a współrzędnymi drugiego okna.
ClientToScreenPrzekształca współrzędne obszaru roboczego okna na współrzędne ekranowe.
Uwaga: metoda nie sprawdza, czy punkt o danych współrzędnych leży wewnątrz obszaru okna.
ScreenToClientPrzekształca współrzędne ekranowe do współrzędnych obszaru roboczego okna.

Tekst okna

Metody Opis
SetWindowTextUstawia tekst związany z danym oknem. Jeśli okno jest kontrolką, tekst jest najczęściej wyświetlany.
Wskazówka: Używaj tej metody do ustawiania tekstu w kontrolkach.
GetWindowTextKopiuje tekst związany z danym oknem (nagłówek lub w przypadku kontrolki tekst wyświetlany w niej).
GetWindowTextLengthZwraca długość w znakach tekstu związanego z danym oknem.
SetFontUstawia czcionkę, którą wyświetlany jest tekst związany z danym oknem.
Wskazówka: Używaj tej metody do ustawiania czcionki dla kontrolek, w szczególności dla kontrolek typu CStatic.
GetFontZwraca czcionkę aktualnie wykorzystywaną w danym oknie.
Uwaga: zwracany wskaźnik ma charakter tymczasowy i nie powinien być przechowywany.

Przesuwanie zawartości - scrolling

Metody Opis
GetScrollPos.
GetScrollRange.
ScrollWindow.
ScrollWindowEx.
GetScrollInfo.
GetScrollLimit.
SetScrollInfo.
SetScrollPos.
SetScrollRange.
ShowScrollBar.
EnableScrollBarCtrl.
GetScrollBarCtrl.
RepositionBars.

Technika Drag & Drop

Metody Opis
DragAcceptFiles.

Kursor

Metody Opis
CreateCaret.
CreateSolidCaret.
CreateGrayCaret.
GetCaretPos.
SetCaretPos.
HideCaret.
ShowCaret.

Funkcje okien dialogowych

Metody Opis
CheckDlgButton.
CheckRadioButton.
GetCheckedRadioButton.
DlgDirList.
DlgDirListComboBox.
DlgDirSelect.
DlgDirSelectComboBox.
GetDlgItemInt.
GetDlgItemText.
GetNextDlgGroupItem.
GetNextDlgTabItem.
IsDlgButtonChecked.
IsDialogMessage.
SendDlgItemMessage.
SetDlgItemInt.
SetDlgItemText.
SubclassDlgItem.
ExecuteDlgInit.
RunModalLoop.
ContinueModal.
EndModalLoop.

Funkcje dostępu do danych

Metody Opis
BindDefaultProperty.
BindProperty.
GetDSCCursor.

Funkcje menu

Metody Opis
GetMenu.
SetMenu.
DrawMenuBar.
GetSystemMenu.
HiliteMenuItem.

Funkcje dymków podpowiedzi (Tool Tip)

Metody Opis
EnableToolTips.
CancelToolTips.
FilterToolTipMessage.
OnToolHitTest.

Funkcje zegara

Metody Opis
SetTimer.
KillTimer.

Funkcje alarmu

Metody Opis
FlashWindow.
MessageBox.

Funkcje komunikatów

Metody Opis
GetCurrentMessage.
Default.
PreTranslateMessage.
SendMessage.
PostMessage.
SendNotifyMessage.

Obsługa schowka

Metody Opis
ChangeClipboardChain.
SetClipboardView.
OpenClipboard.
GetClipboardOwner.
GetOpenClipboardWindow.
GetClipboardViewer.

Kontrolki OLE

Metody Opis
SetProperty.
OnAmbientProperty.
GetControlUnknown.
GetProperty.
InvokeHelper.

Metody do pokrycia w klasach pochodnych

Metody Opis
WindowProc.
DefWindowProc.
PostNcDestroy.
OnNotify.
OnChildNotify.
DoDataExchange.

Obsługa komunikatów

Metody Opis
OnXxxxxWywoływane automatycznie w odpowiedzi na komunikat Xxxxx.


Zobacz także

CView, CFrameWnd, CDialog, Kontrolki

Hierarchia

img/hr_cwnd.gif