CWnd::SetWindowPos

更改子項、彈出窗口以及頂級窗口大小、位置和Z順序。

BOOL SetWindowPos( 
   const CWnd* pWndInsertAfter, 
   int x, 
   int y, 
   int cx, 
   int cy, 
   UINT nFlags  
);

pWndInsertAfter

標識將前面的 CWnd 對象(大於)對Z順序的此 CWnd 對象。 此參數可以是指向 CWnd 或 Pointer 爲下列值之一:

  • wndBottom 將窗口底部的z-順序。 如果此 CWnd 是一個最頂層窗口,窗口丟失其最頂層的狀態;系統將窗口在其他窗口底部。

  • wndTop 將窗口在z-順序的頂部。

  • wndTopMost 將windows首先非最頂層窗口。 即使當停用,窗口保留其最頂層的位置它。

  • wndNoTopMost 在任何非最頂層窗口的頂部重新定位窗口(即所有最頂層窗口)後。 如果窗口已非最頂層窗口,此標誌將不起作用。

有關如何的規則使用此參數,請參見“備註”本主題的一部分。

x

指定窗口的左側的新位置。

y

指定窗口頂部的新位置。

cx

指定窗口的新的寬度。

cy

指定窗口的新高度。

nFlags

指定大小調整和定位選項。 此參數可以是以下標誌的組合:

  • SWP_DRAWFRAME 在窗口周圍繪製幀(定義窗口時所創建的)。

  • SWP_FRAMECHANGED 發送 WM_NCCALCSIZE 信息到窗口,因此,即使未更改窗口的大小。 如果此標誌未指定,則發送 WM_NCCALCSIZE,僅當更改時窗口的大小。

  • SWP_HIDEWINDOW 隱藏窗口。

  • SWP_NOACTIVATE 不窗口被激活。 如果此未設置任何標誌,窗口激活和移到最頂層或非最頂層的組頂級(基於設置 pWndInsertAfter 參數)。

  • SWP_NOCOPYBITS 放棄工作區的整個內容。 如果此標誌未指定,工作區的有效內容保存並將其複製到工作區,在窗口的大小或重新定位之後。

  • SWP_NOMOVE 保留當前位置(忽略 x 和 y 參數)。

  • SWP_NOOWNERZORDER 不會更改。z-順序的所有者窗口的位置。

  • SWP_NOREDRAW 不重繪更改。 如果此標誌設置,重新繪製任何類型不會發生。 這適用於工作區、非工作區(包括標題和滾動條)和由於移動後的窗口中的父窗口的任何部分。 在此標誌設置爲時,應用程序必須顯式無效或重繪必須重繪窗口和父窗口的所有部件。

  • SWP_NOREPOSITION 和 SWP_NOOWNERZORDER相同。

  • SWP_NOSENDCHANGING 防止窗口收到 WM_WINDOWPOSCHANGING 消息。

  • SWP_NOSIZE 保留當前範圍(忽略 cx 和 cy 參數)。

  • SWP_NOZORDER 保留當前排序(忽略 pWndInsertAfter)。

  • SWP_SHOWWINDOW 顯示窗口。

非零,如果函數運行成功;否則,0。

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);
}

頭文件位置: afxwin.h

鏈接:https://msdn.microsoft.com/zh-cn/library/a1yzfz6d.aspx


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章