SetWindowPos: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
K
 
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
 
Die API-Funktion '''SetWindowPos''' positioniert, zeigt und versteckt Fenster.
 
Die API-Funktion '''SetWindowPos''' positioniert, zeigt und versteckt Fenster.
  
<vb>Public Declare Function SetWindowPos Lib "user32" ( _
+
<syntaxhighlight lang="vb">Declare Function SetWindowPos Lib "user32" ( _
                        ByVal hWnd As Long, _
+
                ByVal hWnd As Long, _
                        ByVal hWndInsertAfter As Long, _
+
                ByVal hWndInsertAfter As Long, _
                        ByVal x As Long, _
+
                ByVal x As Long, _
                        ByVal y As Long, _
+
                ByVal y As Long, _
                        ByVal cx As Long, _
+
                ByVal cx As Long, _
                        ByVal cy As Long, _
+
                ByVal cy As Long, _
                        ByVal wFlags As Long) _
+
                ByVal wFlags As Long) _
                        As Long</vb>
+
                As Long</syntaxhighlight>
 
 
  
 
==Parameter==
 
==Parameter==
Zeile 22: Zeile 21:
  
 
:Möglich sind auch die folgenden Werte:
 
:Möglich sind auch die folgenden Werte:
<vb>Const HWND_BOTTOM = 1
+
<syntaxhighlight lang="vb">Const HWND_BOTTOM = 1
 
Const HWND_NOTOPMOST = -2
 
Const HWND_NOTOPMOST = -2
 
Const HWND_TOP = 0
 
Const HWND_TOP = 0
Const HWND_TOPMOST = -1</vb>
+
Const HWND_TOPMOST = -1</syntaxhighlight>
  
 
:<tt>HWND_BOTTOM</tt> sorgt dafür, dass das Fenster ganz unten in der Z-Order plaziert wird und damit hinter allern anderen Fenstern liegt. Andere Fenster der gleichen Anwendung werden möglicherweise "mitgerissen" und ebenfalls "nach hinten" verschoben.
 
:<tt>HWND_BOTTOM</tt> sorgt dafür, dass das Fenster ganz unten in der Z-Order plaziert wird und damit hinter allern anderen Fenstern liegt. Andere Fenster der gleichen Anwendung werden möglicherweise "mitgerissen" und ebenfalls "nach hinten" verschoben.
Zeile 50: Zeile 49:
 
:Steuert, welche Aktion durchgeführt werden soll. Mögliche Werte sind eine Kombination der folgenden Flags:
 
:Steuert, welche Aktion durchgeführt werden soll. Mögliche Werte sind eine Kombination der folgenden Flags:
  
<vb>Const SWP_NOSIZE = &H1
+
<syntaxhighlight lang="vb">Const SWP_NOSIZE As Long = &H1
Const SWP_NOMOVE = &H2
+
Const SWP_NOMOVE As Long = &H2
Const SWP_NOZORDER = &H4
+
Const SWP_NOZORDER As Long = &H4
Const SWP_NOREDRAW = &H8
+
Const SWP_NOREDRAW As Long = &H8
Const SWP_NOACTIVATE = &H10
+
Const SWP_NOACTIVATE As Long = &H10
Const SWP_FRAMECHANGED = &H20
+
Const SWP_FRAMECHANGED As Long = &H20
Const SWP_SHOWWINDOW = &H40
+
Const SWP_SHOWWINDOW As Long = &H40
Const SWP_HIDEWINDOW = &H80
+
Const SWP_HIDEWINDOW As Long = &H80
Const SWP_NOCOPYBITS = &H100
+
Const SWP_NOCOPYBITS As Long = &H100
 
Const SWP_NOOWNERZORDER As Long = &H200
 
Const SWP_NOOWNERZORDER As Long = &H200
 
Const SWP_NOSENDCHANGING As Long = &H400
 
Const SWP_NOSENDCHANGING As Long = &H400
Const SWP_ASYNCWINDOWPOS As Long = &H4000
+
Const SWP_DEFERERASE As Long = &H2000
Const SWP_DEFERERASE As Long = &H2000</vb>
+
Const SWP_ASYNCWINDOWPOS As Long = &H4000</syntaxhighlight>
  
:<tt>SWP_NOSIZE</tt> Verhindert, dass das Fenster eine neue Größe bekommt. ''cx'' und ''cy'' sind dann irrelevant und können auf 0 gesetzt werden.
+
:<tt>SWP_NOSIZE</tt> verhindert, dass das Fenster eine neue Größe bekommt. ''cx'' und ''cy'' sind dann irrelevant und können auf 0 gesetzt werden.
  
:<tt>SWP_NOMOVE</tt> Verhindert, dass das Fenster verschoben wird. ''x'' und ''y'' sind dann irrelevant und können auf 0 gesetzt werden.
+
:<tt>SWP_NOMOVE</tt> verhindert, dass das Fenster verschoben wird. ''x'' und ''y'' sind dann irrelevant und können auf 0 gesetzt werden.
  
:<tt>SWP_NOZORDER</tt> Verhindert, dass die Z-Order-Position verändert wird.
+
:<tt>SWP_NOZORDER</tt> verhindert, dass die Z-Order-Position verändert wird.
  
:<tt>SWP_NOREDRAW</tt> Verhindert, dass irgendetwas automatisch neu gezeichnet wird. Das betrifft sowohl das Fenster selbst, aber auch alle verdeckten Fenster werden nicht invalidiert.
+
:<tt>SWP_NOREDRAW</tt> verhindert, dass irgendetwas automatisch neu gezeichnet wird. Das betrifft sowohl das Fenster selbst, aber auch alle verdeckten Fenster werden nicht invalidiert.
  
:<tt>SWP_NOACTIVATE</tt> Verhindert, dass das Fenster den Fokus erhält.
+
:<tt>SWP_NOACTIVATE</tt> verhindert, dass das Fenster den Fokus erhält.
  
:<tt>SWP_FRAMECHANGED</tt> Wird benutzt um Änderungen der [[SetWindowLong]]-Funktion anzuwenden. Sendet eine [[WM_NCCALCSIZE]]-Nachricht an das Fenster.
+
:<tt>SWP_FRAMECHANGED</tt> wird benutzt um Änderungen der [[SetWindowLong]]-Funktion anzuwenden. Sendet eine [[WM_NCCALCSIZE]]-Nachricht an das Fenster.
  
:<tt>SWP_SHOWWINDOW</tt> Sorgt dafür, dass das Fenster sichtbar wird. Entspricht <tt>Form.Show()</tt>.
+
:<tt>SWP_SHOWWINDOW</tt> sorgt dafür, dass das Fenster sichtbar wird. Entspricht <tt>.Show()</tt> bzw. den Ändern der Visible-Eigenschaft.
  
:<tt>SWP_HIDEWINDOW</tt> Sorgt dafür, dass das Fenster unsichtbar wird. Entspricht <tt>Form.Hide()</tt>.
+
:<tt>SWP_HIDEWINDOW</tt> sorgt dafür, dass das Fenster unsichtbar wird. Entspricht <tt>.Hide()</tt> bzw. den Ändern der Visible-Eigenschaft.
  
:<tt>SWP_NOCOPYBITS</tt> Verwirft den kompletten dargestellten Fensterinhalt und sorgt so für ein vollständiges Neuzeichnen.
+
:<tt>SWP_NOCOPYBITS</tt> verwirft den kompletten dargestellten Fensterinhalt und sorgt so für ein vollständiges Neuzeichnen.
  
:<tt>SWP_NOOWNERZORDER</tt> Verschiebt nicht das besitzende Fenster in der Z-Order.
+
:<tt>SWP_NOOWNERZORDER</tt> verschiebt nicht das besitzende Fenster in der Z-Order.
  
:<tt>SWP_NOSENDCHANGING</tt> Verhindert, dass das Fenster die [[WM_WINDOWPOSCHANGING]]-Nachricht erhält
+
:<tt>SWP_NOSENDCHANGING</tt> verhindert, dass das Fenster die [[WM_WINDOWPOSCHANGING]]-Nachricht erhält
  
:<tt>SWP_ASYNCWINDOWPOS</tt> Verhindert das der aufrufende Thread durch den Thread, der das Fenster verarbeitet, blockiert werden kann.
+
:<tt>SWP_DEFERERASE</tt> verhindert, dass das Fenster die [[WM_SYNCPAINT]]-Nachricht erhält
  
:<tt>SWP_DEFERERASE</tt>Verhindert, dass das Fenster die [[WM_SYNCPAINT]]-Nachricht erhält
+
:<tt>SWP_ASYNCWINDOWPOS</tt> verhindert das der aufrufende Thread durch den Thread, der das Fenster verarbeitet, blockiert werden kann.
  
 
==Rückgabe==
 
==Rückgabe==
Zeile 97: Zeile 96:
  
 
Bereits angezeigtes Fenster immer im Vordergrund halten ohne die Position zu verändern:
 
Bereits angezeigtes Fenster immer im Vordergrund halten ohne die Position zu verändern:
<vb>SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE</vb>
+
<syntaxhighlight lang="vb">SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE</syntaxhighlight>
  
 
(Noch nicht angezeigtes) Fenster anzeigen ohne den Fokus darauf zu setzen:
 
(Noch nicht angezeigtes) Fenster anzeigen ohne den Fokus darauf zu setzen:
<vb>SetWindowPos hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW</vb>
+
<syntaxhighlight lang="vb">SetWindowPos hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW</syntaxhighlight>
  
 
Fenster neu positionieren:
 
Fenster neu positionieren:
<vb>SetWindowPos hWnd, 0, 100, 150, 200, 210, SWP_NOZORDER</vb>
+
<syntaxhighlight lang="vb">SetWindowPos hWnd, 0, 100, 150, 200, 210, SWP_NOZORDER</syntaxhighlight>
  
(Noch nicht angezeigtes) Fenster anzeigen, aber immer im Vordergrund halten, mit Positionsangabe und ohne den Fokus darauf zu setzen:
+
(Noch nicht angezeigtes) Fenster anzeigen, aber immer im Vordergrund halten, mit Positionsangabe und ohne den Fokus darauf zu setzen: (Nützlich für Splashscreens, Info-Popups, Tooltips, systemweite Einblendungen und ähnliches)
<vb>SetWindowPos hWnd, HWND_TOPMOST, left, top, width, height, SWP_NOACTIVATE Or SWP_SHOWWINDOW</vb>
+
<syntaxhighlight lang="vb">SetWindowPos hWnd, HWND_TOPMOST, left, top, width, height, SWP_NOACTIVATE Or SWP_SHOWWINDOW</syntaxhighlight>
  
 
==Verwandte Funktionen==
 
==Verwandte Funktionen==
Zeile 126: Zeile 125:
  
 
[[Kategorie:Fenster]]
 
[[Kategorie:Fenster]]
 +
[[Kategorie:User32]]
 +
[[Kategorie:Funktionen]]

Aktuelle Version vom 5. November 2016, 23:47 Uhr

Die API-Funktion SetWindowPos positioniert, zeigt und versteckt Fenster.

Declare Function SetWindowPos Lib "user32" ( _
                 ByVal hWnd As Long, _
                 ByVal hWndInsertAfter As Long, _
                 ByVal x As Long, _
                 ByVal y As Long, _
                 ByVal cx As Long, _
                 ByVal cy As Long, _
                 ByVal wFlags As Long) _
                 As Long

Parameter

hWnd

Handle des Fensters, welches positioniert werden soll.

hWndInsertAfter

Hinter welchem Fensterhandle das neue Fester positioniert werden soll.
Möglich sind auch die folgenden Werte:
Const HWND_BOTTOM = 1
Const HWND_NOTOPMOST = -2
Const HWND_TOP = 0
Const HWND_TOPMOST = -1
HWND_BOTTOM sorgt dafür, dass das Fenster ganz unten in der Z-Order plaziert wird und damit hinter allern anderen Fenstern liegt. Andere Fenster der gleichen Anwendung werden möglicherweise "mitgerissen" und ebenfalls "nach hinten" verschoben.
HWND_NOTOPMOST sorgt dafür, dass das Fenster über allen normalen, aber unter Topmost-Fenstern dargestellt wird. Falls das Fenster ein Topmost-Fenster war, verliert es den Status.
HWND_TOP sorgt dafür, dass das Fenster über allen normalen Fenstern (der gleichen Anwendung) dargestellt wird. Da der Wert 0 ist, ist dies auch eine Art "Standardeinstellung".
HWND_TOPMOST sorgt dafür, dass das Fenster immer im Vordergrund dargestellt wird, auch wenn es den Fokus verliert. Allerdings können andere Fenster mit der gleichen Eigenschaft je nach Fokus trotzdem das Fenster verdecken. Soll das Fenster die Eigenschaft (wieder) verlieren, muss SetWindowPos mit dem Parameter HWND_NOTOPMOST aufgerufen werden.

x

Die X-Koordinate der neuen Fensterposition (entspricht Left-Eigenschaft) in Pixeln.

y

Die Y-Koordinate der neuen Fensterposition (entspricht Top-Eigenschaft) in Pixeln.

cx

Die Breite der neuen Fensterposition (entspricht Width-Eigenschaft) in Pixeln.

cy

Die Höhe der neuen Fensterposition (entspricht Height-Eigenschaft) in Pixeln.

wFlags

Steuert, welche Aktion durchgeführt werden soll. Mögliche Werte sind eine Kombination der folgenden Flags:
Const SWP_NOSIZE As Long = &H1
Const SWP_NOMOVE As Long = &H2
Const SWP_NOZORDER As Long = &H4
Const SWP_NOREDRAW As Long = &H8
Const SWP_NOACTIVATE As Long = &H10
Const SWP_FRAMECHANGED As Long = &H20
Const SWP_SHOWWINDOW As Long = &H40
Const SWP_HIDEWINDOW As Long = &H80
Const SWP_NOCOPYBITS As Long = &H100
Const SWP_NOOWNERZORDER As Long = &H200
Const SWP_NOSENDCHANGING As Long = &H400
Const SWP_DEFERERASE As Long = &H2000
Const SWP_ASYNCWINDOWPOS As Long = &H4000
SWP_NOSIZE verhindert, dass das Fenster eine neue Größe bekommt. cx und cy sind dann irrelevant und können auf 0 gesetzt werden.
SWP_NOMOVE verhindert, dass das Fenster verschoben wird. x und y sind dann irrelevant und können auf 0 gesetzt werden.
SWP_NOZORDER verhindert, dass die Z-Order-Position verändert wird.
SWP_NOREDRAW verhindert, dass irgendetwas automatisch neu gezeichnet wird. Das betrifft sowohl das Fenster selbst, aber auch alle verdeckten Fenster werden nicht invalidiert.
SWP_NOACTIVATE verhindert, dass das Fenster den Fokus erhält.
SWP_FRAMECHANGED wird benutzt um Änderungen der SetWindowLong-Funktion anzuwenden. Sendet eine WM_NCCALCSIZE-Nachricht an das Fenster.
SWP_SHOWWINDOW sorgt dafür, dass das Fenster sichtbar wird. Entspricht .Show() bzw. den Ändern der Visible-Eigenschaft.
SWP_HIDEWINDOW sorgt dafür, dass das Fenster unsichtbar wird. Entspricht .Hide() bzw. den Ändern der Visible-Eigenschaft.
SWP_NOCOPYBITS verwirft den kompletten dargestellten Fensterinhalt und sorgt so für ein vollständiges Neuzeichnen.
SWP_NOOWNERZORDER verschiebt nicht das besitzende Fenster in der Z-Order.
SWP_NOSENDCHANGING verhindert, dass das Fenster die WM_WINDOWPOSCHANGING-Nachricht erhält
SWP_DEFERERASE verhindert, dass das Fenster die WM_SYNCPAINT-Nachricht erhält
SWP_ASYNCWINDOWPOS verhindert das der aufrufende Thread durch den Thread, der das Fenster verarbeitet, blockiert werden kann.

Rückgabe

Die Funktion gibt einen Wert des Types Long ungleich 0 bei Erfolg, den Wert 0 bei Misserfolg zurück.

Beispiele

Bereits angezeigtes Fenster immer im Vordergrund halten ohne die Position zu verändern:

SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE

(Noch nicht angezeigtes) Fenster anzeigen ohne den Fokus darauf zu setzen:

SetWindowPos hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW

Fenster neu positionieren:

SetWindowPos hWnd, 0, 100, 150, 200, 210, SWP_NOZORDER

(Noch nicht angezeigtes) Fenster anzeigen, aber immer im Vordergrund halten, mit Positionsangabe und ohne den Fokus darauf zu setzen: (Nützlich für Splashscreens, Info-Popups, Tooltips, systemweite Einblendungen und ähnliches)

SetWindowPos hWnd, HWND_TOPMOST, left, top, width, height, SWP_NOACTIVATE Or SWP_SHOWWINDOW

Verwandte Funktionen

Verweise

Quellen