更改子项、弹出窗口以及顶级窗口大小、位置和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); }