DeferWindowPos 函式 (winuser.h)
匯報 指定的多視窗 – 指定視窗的位置結構。 函式接著會傳回更新結構的句柄。 EndDeferWindowPos 函式會使用此結構中的資訊,同時變更一些視窗的位置和大小。 BeginDeferWindowPos 函式會建立 結構。
語法
HDWP DeferWindowPos(
[in] HDWP hWinPosInfo,
[in] HWND hWnd,
[in, optional] HWND hWndInsertAfter,
[in] int x,
[in] int y,
[in] int cx,
[in] int cy,
[in] UINT uFlags
);
參數
[in] hWinPosInfo
類型: HDWP
多視窗的句柄 – 位置結構,其中包含一或多個視窗的大小和位置資訊。 這個結構是由 BeginDeferWindowPos 或最近呼叫 DeferWindowPos 所傳回。
[in] hWnd
類型: HWND
結構中儲存更新信息的視窗句柄。 多視窗中的所有視窗 – 位置結構必須具有相同的父代。
[in, optional] hWndInsertAfter
類型: HWND
視窗的句柄,位於 Z 順序中定位的視窗前面。 此參數必須是視窗句柄或下列其中一個值。 如果在 uFlags 參數中設定SWP_NOZORDER旗標,則會忽略此參數。
[in] x
類型: int
視窗左上角的 X 座標。
[in] y
類型: int
視窗左上角的 Y 座標。
[in] cx
類型: int
視窗的新寬度,以像素為單位。
[in] cy
類型: int
視窗的新高度,以像素為單位。
[in] uFlags
類型: UINT
下列值的組合會影響視窗的大小和位置。
值 | 意義 |
---|---|
|
在視窗的類別描述中,繪製視窗周圍) 定義的框架 (。 |
|
將 WM_NCCALCSIZE 訊息傳送至視窗,即使視窗的大小未變更也一樣。 如果未指定此旗標, 則只有在 視窗的大小變更時,才會傳送WM_NCCALCSIZE。 |
|
隱藏視窗。 |
|
不會啟動視窗。 如果未設定此旗標,則會啟動視窗並移至最上層或最上層群組的頂端, (視 hWndInsertAfter 參數的設定而定) 。 |
|
捨棄工作區的整個內容。 如果未指定此旗標,則會儲存工作區的有效內容,並在視窗重設大小或重新定位之後複製到工作區。 |
|
保留目前的位置 (忽略 x 和 y 參數) 。 |
|
不會變更擁有者視窗在 Z 順序中的位置。 |
|
不會重新繪製變更。 如果設定此旗標,則不會發生任何種類的重新繪製。 這適用於工作區、非客戶端區域 (包括標題列和滾動條) ,以及因視窗移動而發現父視窗的任何部分。 設定此旗標時,應用程式必須明確失效或重新繪製需要重新繪製之視窗和父視窗的任何部分。 |
|
與 SWP_NOOWNERZORDER 旗標相同。 |
|
防止視窗接收 WM_WINDOWPOSCHANGING 訊息。 |
|
保留目前的大小 (忽略 cx 和 cy 參數) 。 |
|
保留目前的 Z 順序 (忽略 hWndInsertAfter 參數) 。 |
|
顯示 視窗。 |
傳回值
類型: HDWP
傳回值會識別更新的多重視窗 – 位置結構。 此函式傳回的句柄可能與傳遞至函式的句柄不同。 此函式傳回的新句柄應該在下一次呼叫 DeferWindowPos 或 EndDeferWindowPos 函式期間傳遞。
如果函式沒有足夠的系統資源可成功,則傳回值為 NULL。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
如果 DeferWindowPos 呼叫失敗,應用程式應該放棄視窗定位作業,而不是呼叫 EndDeferWindowPos。
如果未指定 SWP_NOZORDER ,系統會將 hWnd 參數所識別的視窗放在 hWndInsertAfter 參數所識別窗口之後的位置。 如果 hWndInsertAfter 為 NULL 或 HWND_TOP,系統會將 hWnd 視窗放在 Z 順序的頂端。 如果 hWndInsertAfter 設定為 HWND_BOTTOM,系統會將 hWnd 視窗放在 Z 順序的底部。
子視窗的所有座標都會相對於父視窗工作區的左上角。
您可以將 hWndInsertAfter 設定為HWND_TOPMOST旗標 ,並確保未 設定 SWP_NOZORDER 旗標,或設定視窗在 Z 順序中的位置,使其位於任何現有的最上層視窗上方,以建立最上層視窗的最上層視窗。 當非最上層視窗成為最上層時,其擁有的視窗也會變成最上層。 不過,其擁有者不會變更。
如果 SWP_NOACTIVATE 或 SWP_NOZORDER 旗標都未指定 (亦即,當應用程式要求同時啟動視窗且其位置在 Z 順序中變更) 時,只有在下列情況下才會使用 hWndInsertAfter 中指定的值:
- hWndInsertAfter 中未指定HWND_TOPMOST或HWND_NOTOPMOST旗標。
- 由 hWnd 識別的視窗不是活動視窗。
如果最上層視窗重新定位到底端 (HWND_BOTTOM ) Z 順序或位於任何非最上層窗口之後,最上層視窗就不再是最上層視窗。 當最上層視窗成為非最上層時,其擁有者和擁有的視窗也會成為最上層的視窗。
非最上層視窗可能會擁有最上層的視窗,但反之亦然。 例如,任何視窗 (,最上層視窗所擁有的對話框) 本身都會成為最上層視窗,以確保所有擁有的視窗都停留在其擁有者之上。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | winuser.h (包含 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |
API 集合 | ext-ms-win-ntuser-window-l1-1-4 (Windows 10 10.0.14393 版) |
另請參閱
概念
參考