[ Pobierz całość w formacie PDF ]
okna w pikselach.
W tym polu zapisany zostaje atom identyfikujący klasę
okna. Jak (mam nadzieję) pamiętasz, atom ten zwraca
ATOM atomWindowType funkcja RegisterClass[Ex]() po rejestracji klasy okna, a
wartość ta może zostać użyta w miejsce nazwy tejże klasy w
niektórych funkcjach, jak np. CreateWindow[Ex]().
WORD wCreatorVersion
Określa windowsową wersję aplikacji, która stworzyła okna.
Tabela 35. Pola struktury WINDOWINFO
Z ciekawszych składowych można z pewnością wymienić atomWindowType, dającą
informację o klasie okna, oraz rcClient, określającą jej obszar klienta.
Wymiary obszaru klienta okna można też uzyskać poprzez funkcję GetClientRect().
Uzyskiwanie uchwytów do okien
Spośród zaprezentowanych funkcji każda, co do jednej, wymagała podania uchwytu do
okna. W sumie jest to naturalne, skoro funkcje te służą właśnie do operacji na oknach.
Uchwyt taki trzeba jednak posiadać.
Zasadniczo nie jest to problemem, bo przecież funkcja tworząca okno,
CreateWindowEx(), zwraca nam taki uchwyt typu HWND. Możemy jednak uzyskać uchwyty
okien na wiele innych sposobów; co więcej, możliwe jest nawet pobranie identyfikatora
od nieswojego okna! Spójrzmy zatem na funkcje, jakie Windows API oferuje nam w
tym zakresie.
Poruszanie się po hierarchii okien
Przypomnijmy, że każde stworzone w systemie okno należy do jego hierarchii okien.
Wchodzi więc ono w różnorodne relacje z innymi istniejącymi oknami jako element swego
rodzaju drzewa.
I tak dla każdego okna możemy wyróżnić nieraz całkiem liczną rodzinkę, na którą
składają się:
okno nadrzędne albo rodzic (ang. parent window), znajdujące się o jeden
poziom wyżej w hierarchii. Dla głównych okien aplikacji jest to puplit, one same
stanowią zaś drugi poziom drzewa okien
okna równorzędne albo rodzeństwo (ang. sibling windows), czyli takie okna,
które istnieją na tym samym poziomie hierarchii i mają wspólnego rodzica
okna potomne albo dzieci (ang. child windows), znajdujące się o jeden poziom
niżej w hierarchii okien, mające rozpatrywane okno za rodzica
396
Schemat 40. Relacje między oknami w hierarchii
Najczęściej hierarchia rozciąga się na więcej niż trzy poziomy. Wówczas wszystkie okna
powyżej rozważanego nazywamy jego przodkami (ang. ancestors), natomiast te poniżej
- potomkami (ang. descendants).
Skoro znamy już nazewnictwo stosowane w hierarchii okien112, możemy nauczyć się
uzyskiwać uchwyty do pokrewnych okien przy pomocy odpowiednich funkcji WinAPI.
Stosunkowo najprościej jest zdobyć uchwyt do okna nadrzędnego, ponieważ każde okno
ma tylko jednego rodzica. Zwraca go funkcja GetParent():
HWND GetParent(HWND hWnd);
Jej użycie ma sens dla kontrolek umieszczonych w oknie: wtedy bowiem podanie funkcji
uchwytu do kontrolki skutkuje zwróceniem uchwytu do zawierającego ją okna. W
przypadku jednak gdy funkcją GetParent() potraktujemy główne okno jakiejś aplikacji,
nie otrzymamy, jak by się mogło wydawać, uchwytu okna pulpitu, lecz wartość NULL.
Uchwyt pulpitu zdobędziemy natomiast poprzez GetDesktopWindow().
Nieco trudniejsze jest pozyskanie okien równo- oraz podrzędnych - z tego względu, iż
prawie zawsze istnieje wiele takich okien naraz. Windows API udostępnia nam wszakże
funkcję GetWindow():
HWND GetWindow(HWND hWnd, UINT uCmd);
Korzystając z niej, możemy poruszać się po aktualnym poziomie hierarchii okien113
(oknach równorzędnych) lub też zejść niżej, do okien potomnych. Przeglądanie okien na
danym poziomie odbywa się natomiast według ich porządku Z, czyli kolejności
przesłaniania na ekranie. Możliwe jest więc przejście do okna leżącego zaraz pod
spodem aktualnego oraz bezpośrednio na nim - pod warunkiem oczywiście, jest ono
na tym samym poziomie hierarchii. GetWindow() daje ponadto możliwość skoku na
wierzch i na sam spód porządku Z.
Wyboru interesującego nas działania dokonujemy, wpisując odpowiednią stałą w drugim
parametrze funkcji:
112
Jest ono zresztą stosowane nie tylko tam. Właściwie stosuje się ono do każdej struktury drzewiastej,
używanej w programowaniu, a także np. do węzłów dokumentu XML.
113
[ Pobierz całość w formacie PDF ]