[ Pobierz całość w formacie PDF ]
WMSZ_RIGHT
prawa krawędz
WMSZ_BOTTOM
dolna krawędz
WMSZ_TOPLEFT
lewy górny róg
WMSZ_TOPRIGHT
prawy górny róg
WMSZ_BOTTOMLEFT
lewy dolny róg
WMSZ_BOTTOMRIGHT
prawy dolny róg
Tabela 39. Stałe parametru dwEdge (wParam) komunikatu WM_SIZING
Gdy zajmujemy się niniejszym komunikatem, powinniśmy (podobnie jak w WM_MOVING)
zwrócić wartość TRUE.
Ostatnim komunikatem z omawianego rodzaju WM_WINDOWPOSCHANGING. Różni się on od
dwóch pozostałych przyczyną swojego wystąpienia. Otrzymanie tego komunikatu nie jest
bowiem skutkiem działań użytkownika, lecz samego programu: okno dostaje go, gdy
jego pozycja i/lub rozmiar i/lub miejsce w porządku Z mają za chwilę zostać za pomocą
funkcji w rodzaju SetWindowPos() czy MoveWindow().
Razem z tym komunikatem otrzymujemy też pewne pomocne informacje:
pWindowPos = reinterpret_cast(lParam);
Są one zawarte w strukturze WINDOWPOS, na którą wskaznik dostajemy:
struct WINDOWPOS
{
HWND hwnd;
HWND hwndInsertAfter;
int x;
int y;
int cx;
int cy;
UINT flags;
};
Nietrudno chyba zauważyć, że pola tej struktury odpowiadają dokładnie parametrom
funkcji SetWindowPos(). Jeżeli więc chcesz poznać ich znaczenie, zajrzyj do tabelki z
parametrami wspomnianej funkcji.
Kiedy zaś uporasz się z tym komunikatem, powinieneś oddać do systemu samo zero :)
Na temat komunikat WM_MOVING, WM_SIZING oraz WM_WINDOWPOSCHANGING szeroko
rozpisuje się też MSDN.
415
Po fakcie
Po zakończonej operacji przesuwania i/lub skalowania okna otrzymuje ono kolejny
komunikat. Tego rodzaju zdarzenia także występuje w liczbie trzech i tworzą pary z tymi
zaprezentowanymi w poprzednim paragrafie.
I tak WM_MOVE jest odpowiednikiem WM_MOVING. Okno otrzymuje ten komunikat, gdy
użytkownik zakończy już swoją zabawę z jego przesuwaniem. W zestawie okno dostaje
również swe nowe współrzędne (względem obszaru klienta okna nadrzędnego):
nX = static_cast(LOWORD(lParam));
nY = static_cast(HIWORD(lParam));
Jak widać, są one zapisane w dwóch słowach parametru lParam, a do ich wydobycia
możemy posłużyć się poznanymi makrami LOWORD() i HIWORD().
Na koniec pracy z tym komunikatem powinniśmy zwrócić 0.
Z kolei zdarzenie WM_SIZE jest związane z WM_SIZING i otrzymywane, kiedy użytkownik
przestanie ciągnąć za krawędz lub dokonana maksymalizacji tudzież minimalizacji okna.
Docelowe okno otrzymuje przy okazji także trzy dane:
dwResizingType = wParam;
wWidth = LOWORD(lParam);
wHeight = HIWORD(lParam);
dwResizingType określa, nazwijmy to, typ skalowania. W związku z tym przyjmuje ona
jedną z kilku wyliczeniowych stałych, których część prezentuje poniższa tabelka:
stała znaczenie
SIZE_MAXIMIZED
okno zostało zmaksymalizowane
SIZE_MINIMIZED
minimalizacja okna
SIZE_RESTORED
zwykła zmiana rozmiaru
Tabela 40. Niektóre stałe parametru dwResizingType (wParam) komunikatu WM_SIZE
wWidth i wHeight to, jak nietrudno się domyślić, nowe wymiary okna. Zostały one
zapisane w 16-bitowych połówkach parametru lParam.
Po przetworzeniu komunikatu WM_SIZE należy zwrócić do systemu wartość zero.
Ostatnim komunikatem z tej grupy jest WM_WINDOWPOSCHANGED. Można wydedukować, że
jest on wysłany po zmianie pozycji okna dokonanej przy pomocy SetWindowPos() lub
innej funkcji tego rodzaju.
Ten komunikat przynosi dokładnie te same dane dodatkowe, co WM_WINDOWPOSCHANING.
W parametrze lParam można więc znalezć wskaznik na strukturę WINDOWPOS,
reprezentującą wykonaną zmianę położenia i/lub rozmiaru okna; wParam pozostaje
niewykorzystany.
Również tak samo jak poprzednio, przetworzywszy ten komunikat należy oddać
systemowi liczbę zero.
O komunikatach WM_MOVE, WM_SIZE i WM_WINDOWPOSCHANGED możesz poczytać dokładniej
w MSDN.
WM_PAINT
Ostatni z omawianych tutaj komunikatów jest na tyle ważny, że poświęcimy mu osobny
paragraf.
416
O odrysowywaniu
Porządek Z, przesuwanie, skalowanie, minimalizacja i maksymalizacja sprawiają, że okna
w Windows są często ukrywane lub przykrywane przez inne okna. Jednocześnie muszą
one zachować swoją graficzną zawartość - tak, by użytkownik wiedział, czego może się
po nich spodziewać.
Słysząc pierwszy raz o tym problemie i widząc, jak system radzi sobie z nim w praktyce,
[ Pobierz całość w formacie PDF ]