Problembehandlung
Ändert die Größe, Position und die Z-Reihenfolge des untergeordneten Elements, des Popups und der Fenster der obersten Ebene.
BOOL SetWindowPos(
const CWnd* pWndInsertAfter,
int x,
int y,
int cx,
int cy,
UINT nFlags
);
Parameter
pWndInsertAfter
Identifiziert das Objekt, das CWnd (stellen Sie höher als) CWnd diesem Objekt in der Z-Reihenfolge vorausgeht.Dieser Parameter kann einen Zeiger auf CWndPointer sein oder auf einen der folgenden Werte:wndBottom platziert das Fenster am unteren Rand der Z-Reihenfolge.Wenn dieses CWnd ein Fenster ist, verliert das Fenster den obersten Status; das System gibt das Fenster am unteren Rand alle anderen Fenster.
wndTop gibt das Fenster am Anfang der Z-Reihenfolge.
wndTopMost platziert die nicht-obersten Fenster des Fensters vor allen.Das Fenster behält seine obere Position beibehalten, auch wenn er deaktiviert ist.
wndNoTopMost ordnet das Fenster zum Anfang aller nicht-obersten Fenster neu (das heißt, hinter allen obersten Fenstern).Dieses Flag hat keine Auswirkungen, wenn das bereits ein nicht-oberstes Fenster ist.
Für Regeln darüber, wie Sie den Parameter, finden Sie im Abschnitt "Hinweis" Abschnitt dieses Themas verwendet.
x
Gibt die neue Position der linken Seite des Fensters angezeigt.y
Gibt die neue Position für den oberen Rand des Fensters angezeigt.cx
Gibt die neue Breite des Fensters angezeigt.cy
Gibt die neue Höhe des Fensters angezeigt.nFlags
Gibt Größenanpassung und Positionierungsoptionen an.Dieser Parameter kann eine Kombination der folgenden Flags sein:SWP_DRAWFRAME zeichnet Frames (definiert, als das Fenster erstellt wurde), um das Fenster.
SWP_FRAMECHANGEDWM_NCCALCSIZE sendet eine Meldung in die Fenster, selbst wenn die Größe des Fensters nicht geändert wird.Wenn dieses Flag nicht angegeben wird, wird WM_NCCALCSIZE nur gesendet, wenn die Größe des Fensters geändert wird.
SWP_HIDEWINDOW blendet das Fenster aus.
SWP_NOACTIVATE ermöglicht nicht das Fenster.Wenn dieses Flag nicht festgelegt ist, wird das Fenster auf den oberen entweder der obersten oder nicht-obersten Gruppe aktiviert und verschoben (abhängig von der Einstellung des Parameters pWndInsertAfter ).
SWP_NOCOPYBITS verwirft den gesamten Inhalt des Clientbereichs.Wenn dieses Flag nicht angegeben wird, wird der Inhalt des Clientbereichs gültige zurück in den Clientbereich gespeichert und kopiert, nachdem das Fenster sortiert oder neu angeordnet ist.
SWP_NOMOVE behält aktuelle Position verwaltet (ignoriert die x- und y-Parameter).
SWP_NOOWNERZORDER ändert nicht die Position des Besitzerfensters in der Z-Reihenfolge.
SWP_NOREDRAW zeichnet keine Änderungen neu.Wenn dieses Flag festgelegt ist, tritt kein neu zu jeder der Art auf.Dies gilt für den Clientbereich, den Nicht-Clientbereich (einschließlich Name und Bildlaufleisten) und einen Teil des übergeordneten Fensters, das aufgrund des verschobenen Fensters zumindest teilweise nicht überdeckt wird.Wenn dieses Flag festgelegt wird, muss die Anwendung alle Teile des Fensters und des übergeordneten Fensters explizit NULL oder neu entwerfen, die neu gezeichnet werden müssen.
SWP_NOREPOSITION identisch SWP_NOOWNERZORDER.
SWP_NOSENDCHANGING verhindert, dass die WM_WINDOWPOSCHANGING Meldung empfängt.
SWP_NOSIZE behält aktuelle Größe verwaltet (ignoriert die cx und cy-Parameter).
SWP_NOZORDER behält aktuelle Reihenfolge bei (ignoriert pWndInsertAfter).
SWP_SHOWWINDOW wird das Fenster dargestellt.
Rückgabewert
Ungleich 0 (null), wenn die Funktion erfolgreich; andernfalls 0.
Hinweise
Windows werden auf dem Bildschirm entsprechend ihrer Z-Reihenfolge angeordnet; das Fenster am Anfang der Z-Reihenfolge wird auf alle anderen Fenster in der Reihenfolge.
Alle Koordinaten für untergeordnete Fenster sind Clientkoordinaten (relativ zur linken oberen Ecke des Clientbereichs des übergeordneten Fensters).
Ein Fenster kann auf die der Z-Anordnung verschoben werden jeweils den pWndInsertAfter-Parameter zu &wndTopMost festlegt und sicherstellen, dass das SWP_NOZORDER-Flag festgelegt wird, indem die Z-Reihenfolge eines Fensters festlegen, sodass es für alle vorhandenen obersten Fenstern ist.Wenn ein nicht-oberstes Fenster oben hergestellt wird, werden dessen zum Besitzer gehörige Fenster auch oben hergestellt.Die Besitzer werden nicht geändert.
Ein zuoberst angeordnetes Fenster ist nicht mehr oben, wenn unten auf (&wndBottom) der Z-Reihenfolge oder nach jedem nicht-obersten Fenster neu angeordnet wird.Wenn ein Fenster nicht-oberst hergestellt wird, werden alle enthaltenen und ihrer zum Besitzer gehörige Fenster auch nicht-oberste Fenster gemacht.
Wenn weder noch SWP_NOACTIVATESWP_NOZORDER angegeben ist (das heißt, wenn die Anwendung, die ein Fenster gleichzeitig in die angegebene Z-Reihenfolge aktiviert und platziert ist), wird der Wert, der in pWndInsertAfter angegeben ist, wird nur unter folgenden Umständen verwendet:
Weder wird &wndTopMost noch &wndNoTopMost im pWndInsertAfter-Parameter angegeben.
Dieses Fenster ist nicht das aktive Fenster.
Eine Anwendung kann ein inaktives Fenster nicht aktivieren, ohne es zur der Z-Anordnung auch einzubinden.Anwendungen können die Z-Reihenfolge eines aktivierten Fensters ohne Einschränkungen ändern.
Ein nicht-oberstes Fenster besitzt möglicherweise ein Fenster, jedoch nicht umgekehrt.Jedes Fenster (beispielsweise, ein Dialogfeld) im Besitz ein Fenster selbst wird ein Fenster vorgenommen, um sicherzustellen, dass alle zum Besitzer gehörige Fenster über dem Besitzer bleiben.
Mit Windows-Versionen 3,1 und höher, können auf die Fenster der Z-Anordnung verschoben werden und es gesperrt werden, indem ihre WS_EX_TOPMOST Stile festlegen.Ein solches oberstes Fenster behält seine obere Position beibehalten, auch wenn deaktiviert.Beispielsweise stellt das Auswählen des Befehls " WinHelp immer im Vordergrund das Fenster oben erstellt, und sie bleibt dann sichtbar, wenn Sie der Anwendung zurückkehren.
So wird ein Fenster, einen Aufruf SetWindowPos mit dem pWndInsertAfter-Parameter gleich &wndTopMost erstellen, oder das WS_EX_TOPMOST Format festlegen, wenn Sie das Fenster erstellen.
Wenn die Z-Reihenfolge alle Fenster mit dem WS_EX_TOPMOST Format enthält, wird ein Fenster, das mit dem Wert &wndTopMost verschoben wird, am Anfang aller nicht-obersten Fenster, aber unter alle obersten Fenster platziert.Wenn eine Anwendung ein inaktives Fenster ohne das WS_EX_TOPMOST Bit aktiviert, ist das Fenster verschobene vor allen nicht-oberste Fenster jedoch unter allen obersten Fenstern.
Wenn SetWindowPos aufgerufen wird, wenn der pWndInsertAfter-Parameter ist, &wndBottom und CWnd ein Fenster ist, verliert das Fenster den obersten Status (WS_EX_TOPMOST gelöscht wird), und das System gibt das Fenster am unteren Rand der Z-Reihenfolge.
Beispiel
void CMyApp::OnHideApplication()
{
//m_pMainWnd is the main application window, a member of CMyApp
ASSERT_VALID(m_pMainWnd);
// hide the application's windows before closing all the documents
m_pMainWnd->ShowWindow(SW_HIDE);
m_pMainWnd->ShowOwnedPopups(FALSE);
// put the window at the bottom of z-order, so it isn't activated
m_pMainWnd->SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
}
Anforderungen
Header: afxwin.h