Składnia
#include <windows.h>
BOOL WINAPI SetWindowPos( HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags );
Argumenty
Zwracana wartość
Jeśli nie wystąpią błędy, zwracana wartość jest niezerowa, inaczej 0. Aby uzyskać szczegółowe informacje o błędzie, wywołaj funkcję
GetLastError.
Dodatkowe informacje
Okna umieszczone na osi Z są układane zgodnie z kolejnością ich pojawiania się na ekranie. Okno najwyższego poziomu ma najwyższy priorytet i jest pierwszym oknem na osi Z. Wartości argumentów
X i
Y są wyrażone we współrzędnych klienta, natomiast wartości argumentów
cx i
cy w pikselach.
Na niektórych systemach Windows Vista wszystkie usługi zostały przeniesione na zewnątrz pulpitu interaktywnego do sesji 0. Uchwyty do okien i operacje menedżera okien przynoszą rezultaty tylko wewnątrz obecnej sesji. Wszelkie próby zmiany uchwytu okna w innych sesjach zakończą się niepowodzeniem. Jeśli określone dane okna zostaną zmienione przy użyciu funkcji
SetWindowLong, należy wywołać tą funkcję z argumentem
uFlags o wartości
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED
, aby uzyskać oczekiwane rezultaty.
Okno może być oknem najwyższego poziomu również przez ustawienie wartości argumentu
hWndInsertAfter na
HWND_TOPMOST i upewnieniu się, że flaga
SWP_NOZORDER nie jest ustawiona. Można również umieścić okno na osi Z powyżej jakichkolwiek istniejących okien najwyższego poziomu. Kiedy okno niebędące oknem najwyższego poziomu staje się oknem najwyższego poziomu, jego okna potomne również stają się oknami najwyższego poziomu. Mimo tego okna nadrzędne dla tego okna nie zmieniają swojego stanu.
Jeśli flagi
SWP_NOACTIVATE i
SWP_NOZORDER nie są ustawione (na przykład okno jest aktywowane i jednocześnie jego pozycja na osi Z zostaje zmieniona), wartość argumentu
hWndInsertAfter jest używana tylko w następujących sytuacjach:
Program nie może aktywować nieaktywnego okna bez przeniesienia go na szczyt osi Z. Programy mogą zmieniać pozycję okna aktywowanego na osi Z bez ograniczeń oraz mogą aktywować okno, a następnie przemieścić je na szczyt okien najwyższego poziomu lub okien innych, niż okna najwyższego poziomu. Jeśli okno najwyższego poziomu znajdzie się na ostatniej pozycji na osi Z (
HWND_BOTTOM) lub znajdzie się pod wszystkimi oknami najwyższego poziomu, przestaje być oknem najwyższego poziomu. Kiedy okno najwyższego poziomu przestaje być oknem najwyższego poziomu, jego okna potomne również przestają być oknami najwyższego poziomu. Okno niebędące oknem najwyższego poziomu może być oknem nadrzędnym dla okna najwyższego poziomu, ale nie odwrotnie. Każde okno (na przykład okno dialogowe) będące oknem podrzędnym dla okna najwyższego poziomu jest także oknem najwyższego poziomu. Dzięki temu wszystkie okna potomne znajdują się nad swoim oknem nadrzędnym (na przykład okno dialogowe znajduje się nad głównym oknem programu). Jeśli program nie znajduje się w tle, ale powinien działać w tle, należy wywołać funkcję
SetForegroundWindow. Aby to zrobić, proces będący właścicielem okna musi mieć dostęp do funkcji
SetForegroundWindow.
Wymagania
Linki zewnętrzne