Share via


CWnd::SetWindowPos

變更子系、快顯和最上層視窗大小、位置和疊置順序。

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

參數

  • pWndInsertAfter
    識別所 CWnd 物件 (大於) 在疊置順序的這 CWnd 物件之前。 這個參數可以是指標 CWnd指標 為下列其中一個值:

    • wndBottom 放置視窗下方的疊置順序。 如果這 CWnd 為最上層的視窗,視窗會遺失最上層的狀態,系統會將視窗在其他視窗的底部。

    • wndTop 放置視窗在疊置順序的頂端。

    • 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 保留目前位置 (忽略 xy 參數)。

    • SWP_NOOWNERZORDER 不變更疊置順序的主控視窗的位置。

    • SWP_NOREDRAW 也不會重新繪製變更。 如果設定這個旗標,重新繪製任何類型都不會發生。 這適用於工作區和非工作區 (包括標題和捲軸) 和會移動視窗所發現之父視窗的任何部分。 當設定這個旗標時,應用程式必須明確失效或重繪必須重新繪製視窗與父視窗的所有組件。

    • SWP_NOREPOSITIONSWP_NOOWNERZORDER相同。

    • SWP_NOSENDCHANGING 防止視窗 WM_WINDOWPOSCHANGING 接收訊息。

    • SWP_NOSIZE 保留目前大小 (忽略 cx 和 cy 參數)。

    • SWP_NOZORDER 保留目前的順序 (忽略 pWndInsertAfter)。

    • SWP_SHOWWINDOW 顯示視窗。

傳回值

如果不是零,則函式成功,則為,否則為 0。

備註

視窗在螢幕上排序是根據其疊置順序 (Z-order),視窗在疊置順序的頂端會出現在其他視窗頂端的順序。

子視窗的任何座標為工作區座標 (相對於父視窗的工作區的左上角)。 

視窗中會移動到疊置順序的頂端這兩項設定為 _&wndTopMost 的 pWndInsertAfter 參數並確保 SWP_NOZORDER 旗標不會透過設定視窗的疊置順序設定為或,讓它在任何現有的最上層視窗。 當非最上層視窗讓最上方時,其主控視窗也可以讓最上方。 不會變更它的擁有人。

最上層的視窗不再是最上方,則會重新定位至底部 (_&wndBottom)疊置順序或任何非最上層的視窗之後。 在最上層的視窗讓非最上層時,所有的擁有者和其附屬視窗也製作非最上層視窗。

如果 SWP_NOACTIVATESWP_NOZORDER 未指定 (也就是,在視窗中指定的疊置順序 (Z-order) 同時啟動和位置) 的應用程式需要,在 pWndInsertAfter 指定的值會在下列情況中只使用:

  • _&wndTopMost_&wndNoTopMost 在 pWndInsertAfter 參數未指定。

  • 這個視窗不是使用中視窗。

應用程式無法啟動視窗的框線色彩也不帶至到疊置順序的最上層。 應用程式可以變更已啟動的視窗疊置順序 (Z-order) 沒有限制。

非最上層視窗可能" (Dependency) 擁有最上層的視窗,不過,。 最上層的視窗 (例如, 對話方塊) 主控的所有視窗本身會確保最上層的視窗的所有附屬視窗 (Owned Window) 的在其主控上暫停。

Windows 3.1 (含) 以後版本,則可以移至疊置順序的頂端、將其 WS_EX_TOPMOST 模式鎖定的存在。 這類最上層的視窗會維持它最上方的位置,即使停用。 例如,選取 WinHelp 頂端命令一定會讓說明視窗最上方,,然後保持可見,便回應用程式時。

然後,當您建立視窗時,要建立一個最上層的視窗,請改為使用 pWndInsertAfter 參數的 SetWindowPos 等於 _&wndTopMost或設定 WS_EX_TOPMOST 樣式。

如果圖層順序包含 WS_EX_TOPMOST 樣式的任何視窗,視窗移動 _&wndTopMost 值放在任何非最上層視窗的頂端,,但在任何最上層的視窗中。 當應用程式啟動視窗的框線色彩,而不會 WS_EX_TOPMOST 欄位時,視窗是移動的第一個非最上層的視窗,但在任何最上層的視窗中。

如果 SetWindowPos 時呼叫, pWndInsertAfter 參數為時 _&wndBottom ,並 CWnd 為最上層的視窗,視窗會遺失最上層的狀態 (清除),WS_EX_TOPMOST ,而且系統會將視窗下方的疊置順序。

範例

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

需求

Header: afxwin.h

請參閱

參考

CWnd 類別

階層架構圖

DeferWindowPos

SetWindowPos