SetWindowPos-Funktion (winuser.h)

Ändert die Größe, Position und Z-Reihenfolge eines untergeordneten Fensters, eines Popupfensters oder eines Fensters auf oberster Ebene. Diese Fenster werden entsprechend ihrer Darstellung auf dem Bildschirm sortiert. Das oberste Fenster erhält den höchsten Rang und ist das erste Fenster in der Z-Reihenfolge.

Syntax

BOOL SetWindowPos(
  [in]           HWND hWnd,
  [in, optional] HWND hWndInsertAfter,
  [in]           int  X,
  [in]           int  Y,
  [in]           int  cx,
  [in]           int  cy,
  [in]           UINT uFlags
);

Parameter

[in] hWnd

Typ: HWND

Ein Handle für das Fenster.

[in, optional] hWndInsertAfter

Typ: HWND

Ein Handle für das Fenster, das dem positionierten Fenster in der Z-Reihenfolge vorangestellt wird. Dieser Parameter muss ein Fensterhandle oder einer der folgenden Werte sein.

Wert Bedeutung
HWND_BOTTOM
(HWND)1
Places das Fenster am unteren Rand der Z-Reihenfolge. Wenn der hWnd-Parameter ein oberstes Fenster identifiziert, verliert das Fenster seine oberste status und wird am unteren Rand aller anderen Fenster platziert.
HWND_NOTOPMOST
(HWND)-2
Places das Fenster über allen nicht obersten Fenstern (d. a. hinter allen obersten Fenstern). Dieses Flag hat keine Auswirkung, wenn das Fenster bereits ein nicht oberstes Fenster ist.
HWND_TOP
(HWND)0
Places das Fenster oben in der Z-Reihenfolge.
HWND_TOPMOST
(HWND)-1
Places das Fenster über allen Fenstern, die nicht oberste Fenster sind. Das Fenster behält seine oberste Position bei, auch wenn es deaktiviert ist.
 

Weitere Informationen zur Verwendung dieses Parameters finden Sie im folgenden Abschnitt hinweise.

[in] X

Typ: int

Die neue Position der linken Seite des Fensters in Clientkoordinaten.

[in] Y

Typ: int

Die neue Position des oberen Rands des Fensters in Clientkoordinaten.

[in] cx

Typ: int

Die neue Breite des Fensters in Pixeln.

[in] cy

Typ: int

Die neue Höhe des Fensters in Pixeln.

[in] uFlags

Typ: UINT

Die Fensterdimensionierungs- und Positionierungsflags. Für diesen Parameter ist eine Kombination der folgenden Werte gültig.

Wert Bedeutung
SWP_ASYNCWINDOWPOS
0x4000
Wenn der aufrufende Thread und der Thread, der das Fenster besitzt, an verschiedene Eingabewarteschlangen angefügt sind, sendet das System die Anforderung an den Thread, der das Fenster besitzt. Dadurch wird verhindert, dass der aufrufende Thread seine Ausführung blockiert, während andere Threads die Anforderung verarbeiten.
SWP_DEFERERASE
0x2000
Verhindert die Generierung der WM_SYNCPAINT Nachricht.
SWP_DRAWFRAME
0x0020
Zeichnet einen Rahmen (definiert in der Klassenbeschreibung des Fensters) um das Fenster.
SWP_FRAMECHANGED
0x0020
Wendet mithilfe der SetWindowLong-Funktion neue Frameformatvorlagen an. Sendet eine WM_NCCALCSIZE Nachricht an das Fenster, auch wenn die Größe des Fensters nicht geändert wird. Wenn dieses Flag nicht angegeben ist, wird WM_NCCALCSIZE nur gesendet, wenn die Größe des Fensters geändert wird.
SWP_HIDEWINDOW
0x0080
Blendet das Fenster aus.
SWP_NOACTIVATE
0x0010
Aktiviert das Fenster nicht. Wenn dieses Flag nicht festgelegt ist, wird das Fenster aktiviert und an den Anfang der obersten oder nicht obersten Gruppe verschoben (abhängig von der Einstellung des hWndInsertAfter-Parameters ).
SWP_NOCOPYBITS
0x0100
Verwirft den gesamten Inhalt des Clientbereichs. Wenn dieses Flag nicht angegeben ist, werden die gültigen Inhalte des Clientbereichs gespeichert und wieder in den Clientbereich kopiert, nachdem das Fenster dimensioniert oder neu positioniert wurde.
SWP_NOMOVE
0x0002
Behält die aktuelle Position bei (ignoriert die X - und Y-Parameter ).
SWP_NOOWNERZORDER
0x0200
Ändert die Position des Besitzerfensters in der Z-Reihenfolge nicht.
SWP_NOREDRAW
0x0008
Änderungen werden nicht neu gezeichnet. Wenn dieses Flag festgelegt ist, erfolgt keine Neulackierung jeglicher Art. Dies gilt für den Clientbereich, den Nichtclientbereich (einschließlich Titelleiste und Bildlaufleisten) und alle Teile des übergeordneten Fensters, die aufgrund des Verschiebens des Fensters aufgedeckt wurden. Wenn dieses Flag festgelegt ist, muss die Anwendung alle Teile des Fensters und des übergeordneten Fensters, die neu ausgezeichnet werden müssen, explizit für ungültig erklären oder neu zeichnen.
SWP_NOREPOSITION
0x0200
Identisch mit dem flag SWP_NOOWNERZORDER .
SWP_NOSENDCHANGING
0x0400
Verhindert, dass das Fenster die WM_WINDOWPOSCHANGING-Nachricht empfängt.
SWP_NOSIZE
0x0001
Behält die aktuelle Größe bei (ignoriert die Parameter cx und cy ).
SWP_NOZORDER
0x0004
Behält die aktuelle Z-Reihenfolge bei (ignoriert den Parameter hWndInsertAfter ).
SWP_SHOWWINDOW
0x0040
Zeigt das Fenster an.

Rückgabewert

Typ: BOOL

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Im Rahmen der Vista-Neuarchitektur wurden alle Dienste vom interaktiven Desktop in Sitzung 0 verschoben. hwnd- und Fenster-Manager-Vorgänge sind nur innerhalb einer Sitzung wirksam, und sitzungsübergreifende Versuche, den hwnd zu bearbeiten, schlagen fehl. Weitere Informationen finden Sie unter The Windows Vista Developer Story: Application Compatibility Cookbook.

Wenn Sie bestimmte Fensterdaten mithilfe von SetWindowLong geändert haben, müssen Sie SetWindowPos aufrufen, damit die Änderungen wirksam werden. Verwenden Sie die folgende Kombination für uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

Ein Fenster kann zu einem obersten Fenster gemacht werden, indem entweder der hWndInsertAfter-Parameter auf HWND_TOPMOST festgelegt wird und sichergestellt wird, dass das SWP_NOZORDER-Flag nicht festgelegt ist, oder indem die Position eines Fensters in der Z-Reihenfolge festgelegt wird, sodass es über allen vorhandenen obersten Fenstern liegt. Wenn ein Fenster, das nicht ganz oben steht, an oberster Stelle steht, werden auch seine eigenen Fenster an oberster Stelle gestellt. Seine Besitzer werden jedoch nicht geändert.

Wenn weder das SWP_NOACTIVATE noch SWP_NOZORDER-Flag angegeben wird (d. h. wenn die Anwendung die gleichzeitige Aktivierung eines Fensters anfordert und seine Position in der Z-Reihenfolge geändert wird), wird der in hWndInsertAfter angegebene Wert nur unter den folgenden Umständen verwendet.

  • Weder das flag HWND_TOPMOST noch HWND_NOTOPMOST wird in hWndInsertAfter angegeben.
  • Das von hWnd identifizierte Fenster ist nicht das aktive Fenster.
Eine Anwendung kann ein inaktives Fenster nicht aktivieren, ohne es an den Anfang der Z-Reihenfolge zu bringen. Anwendungen können die Position eines aktivierten Fensters in der Z-Reihenfolge ohne Einschränkungen ändern, oder sie können ein Fenster aktivieren und es dann an die spitze der obersten oder nicht obersten Fenster verschieben.

Wenn ein Fenster am obersten Rand am unteren Rand (HWND_BOTTOM) der Z-Reihenfolge oder nach einem fenster, das nicht ganz oben liegt, neu positioniert wird, ist es nicht mehr ganz oben. Wenn ein oberstes Fenster als nicht oberstes Fenster festgelegt wird, werden seine Besitzer und seine eigenen Fenster ebenfalls zu nicht obersten Fenstern.

Ein Fenster, das nicht ganz oben steht, kann ein oberstes Fenster besitzen, aber die Umgekehrte kann nicht auftreten. Jedes Fenster (z. B. ein Dialogfeld), das einem obersten Fenster gehört, wird selbst zu einem obersten Fenster gemacht, um sicherzustellen, dass alle eigenen Fenster über ihrem Besitzer bleiben.

Wenn sich eine Anwendung nicht im Vordergrund befindet und sich im Vordergrund befinden sollte, muss sie die SetForegroundWindow-Funktion aufrufen.

Wenn Sie SetWindowPos verwenden möchten, um ein Fenster nach oben zu bringen, muss der Prozess, dem das Fenster gehört, über die Berechtigung SetForegroundWindow verfügen.

Beispiele

Ein Beispiel finden Sie unter Initialisieren eines Dialogfelds.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (einschließlich Windows.h)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-window-l1-1-0 (eingeführt in Windows 8)

Siehe auch

Konzept

MoveWindow

Referenz

SetActiveWindow

SetForegroundWindow

Windows