更新指定的多窗口 - 指定窗口的位置结构。 然后,该函数将句柄返回到更新的结构。 EndDeferWindowPos 函数使用此结构中的信息同时更改多个窗口的位置和大小。 BeginDeferWindowPos 函数创建结构。
Syntax
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
以下值的组合,这些值会影响窗口的大小和位置。
| 价值 | Meaning |
|---|---|
|
在窗口周围绘制一个框架(在窗口的类说明中定义)。 |
|
将 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),或位于任何非最顶层窗口之后,则最顶部窗口不再是最顶部的窗口。 当最顶部的窗口设为非顶部时,其所有者和拥有的窗口也成为最顶层的窗口。
非最顶层的窗口可能拥有最顶层的窗口,但反之亦然。 任何窗口(例如,由最顶端窗口拥有的对话框)本身都是一个最顶层的窗口,以确保所有拥有的窗口都保持在其所有者之上。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
| 支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
| 目标平台 | Windows操作系统 |
| Header | winuser.h (包括 Windows.h) |
| Library | User32.lib |
| DLL | User32.dll |
| API 集 | ext-ms-win-ntuser-window-l1-1-4(在 Windows 10 版本 10.0.14393 中引入) |
另请参阅
概念
引用