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 标识的窗口不是活动窗口。
如果最顶层窗口重新定位到 Z 顺序的底部 (HWND_BOTTOM) 或任何非最顶部窗口之后,则它将不再是最顶部窗口。 当最顶部的窗口成为非最顶部窗口时,其所有者及其拥有的窗口也成为非最顶部的窗口。
非最顶部窗口可以拥有最顶部窗口,但反之则不然。 由最顶部窗口拥有的任何窗口(例如对话框)本身将变成最顶部窗口,以确保所有被拥有的窗口位于其所有者之上。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
API 集 | Windows 10版本 10.0.14393 中引入的 ext-ms-win-ntuser-window-l1-1-4 () |
另请参阅
概念性
引用