更改子項、彈出窗口以及頂級窗口大小、位置和Z順序。
BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );
Windows在屏幕上的排序依據的Z順序;窗口在z-順序的頂部顯示在其他窗口頂部的順序。
子窗口的所有座標是工作區座標(相對於父窗口工作區的左上角)。
窗口可以移至z-順序的頂部方法是設置爲 &wndTopMost 的 pWndInsertAfter 參數並確保 SWP_NOZORDER 標記不通過設置窗口的Z順序設置,以便在任何現有的最頂層窗口上。 當非最頂層窗口使最頂層時,其擁有的窗口還使最頂層。 不更改其所有者。
個最頂層窗口不再是最頂層的,則重新定位到底(&wndBottom) z-順序或任何非最頂層窗口之後。 當一個最頂層窗口使非最頂層時,所有其所有者及其擁有的窗口還創建非最頂層窗口。
如果 SWP_NOACTIVATE 和 SWP_NOZORDER 未指定(即,當應用程序請求窗口在指定的Z順序同時激活和放置),在 pWndInsertAfter 指定的值在以下情況下只使用:
-
&wndTopMost 和 &wndNoTopMost 在 pWndInsertAfter 參數中指定。
-
此窗口不是活動窗口。
應用程序無法激活無效窗口不從而使後者成爲Z順序的頂部。 應用程序可以更改已激活的窗口的Z順序沒有限制。
非最頂層窗口可能不熟悉擁有最頂層窗口,但是。 個最頂層窗口(例如,對話框)擁有的所有窗口本身進行確保一個最頂層窗口所有附屬窗口在其所有者上維護。
Windows 3.1版和更高版本,窗口可以移至z-順序的頂部和通過設置其 WS_EX_TOPMOST 樣式鎖定即可。 這一最頂層窗口保留其最頂層的位置,即使當停用。 例如,選擇WinHelp在頂部命令始終使幫助窗口最頂端,並且,然後保持可見,當返回您的應用程序時。
在創建windows時,若要創建最頂層的窗口,則調用與 pWndInsertAfter 參數的 SetWindowPos 等於 &wndTopMost或設置 WS_EX_TOPMOST 樣式。
如果該Z順序包含 WS_EX_TOPMOST 樣式的任何窗口,窗口將與 &wndTopMost 值放置在任何非最頂層窗口的頂部,但在任何最頂層窗口中。 當應用程序激活無效窗口,而無需WS_EX_TOPMOST 位時,窗口是移動的第一個非最頂層窗口,但在任何最頂層窗口中。
如果 SetWindowPos 調用,當 pWndInsertAfter 參數爲時 &wndBottom,並 CWnd 是一個最頂層窗口,窗口丟失其最頂層的狀態(清除WS_EX_TOPMOST ),並且,則系統將窗口底部的z-順序。
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); }