SetWindowPos功能可以更改小孩,弹出式窗口或顶级窗口的大小,位置和Z顺序。孩子,弹出窗口和顶级窗口根据屏幕上的外观进行排序。最顶层的窗口接收到最高等级,是Z顺序中的第一个窗口。
BOOL SetWindowPos(
HWND 【的hWnd】, | //窗口的句柄 |
HWND 【hWndInsertAfter】, | //放置顺序句柄 |
INT 【X】, | // 水平位置 |
INT 【Y】, | //垂直位置 |
INT 【cx】, | // width |
INT 【cy】, | // height |
UINT 【uFlags】 | //窗口定位标志 |
); |
参数
【的hWnd】
标识窗口。
【hWndInsertAfter】
标识Z定位窗口之前的窗口。此参数必须是窗口句柄或以下值之一:
值 | 含义 |
HWND_BOTTOM | 将窗口放在Z顺序的底部。如果【的hWnd】参数标识最上面的窗口,窗口将失去其最高状态,并放置在所有其他窗口的底部。 |
HWND_NOTOPMOST | 将窗口放在所有非最顶层的窗口之上(即,在所有最上面的窗口之后)。如果窗口已经是非最上面的窗口,则此标志无效。 |
HWND_TOP | 将窗口放在Z顺序的顶部。 |
HWND_TOPMOST | 将窗口放在所有非最顶层的窗口之上。即使停用窗口,窗口保持其最高位置。 |
有关如何使用此参数的更多信息,请参阅以下备注部分。
【X】
指定窗口左边的新位置。
【Y】
指定窗口顶部的新位置。
【cx】
指定窗口的新宽度(以像素为单位)。
【cy】
指定窗口的新高度(以像素为单位)。
【uFlags】
指定窗口大小和定位标志。此参数可以是以下值的组合:
值 | 含义 |
SWP_DRAWFRAME | 在窗口周围绘制一个框架(在窗口的类描述中定义)。 |
SWP_FRAMECHANGED | 发送WM_NCCALCSIZE消息到窗口,即使窗口的大小没有被更改。如果未指定此标志,WM_NCCALCSIZE仅在窗口大小更改时发送。 |
SWP_HIDEWINDOW | 隐藏窗户 |
SWP_NOACTIVATE | 不激活窗口。如果未设置此标志,则该窗口将被激活并移动到顶部或顶部的顶部(取决于【hWndInsertAfter】参数的设置)。 |
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 | 保留当前的Z顺序(忽略【hWndInsertAfter】参数)。 |
SWP_SHOWWINDOW | 显示窗口。 |
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
如果设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW标志,则不能移动或调整窗口大小。
子窗口的所有坐标都是客户端坐标(相对于父窗口的客户区域的左上角)。
可以通过将【hWndInsertAfter】参数设置为HWND_TOPMOST并确保未设置SWP_NOZORDER标志,或者通过以Z顺序设置窗口的位置,使其高于任何现有的最上面的窗口,可以将窗口设置为最上面的窗口。当最顶层的窗口是最上面的时候,它的所有窗口也是最上面的。然而,它的所有者并没有改变。
如果既不指定SWP_NOACTIVATE也不指定SWP_NOZORDER标志(即当应用程序请求同时激活窗口并改变其Z位置时),【hWndInsertAfter】中指定的值仅在以下情况下使用:
* 【hWndInsertAfter】中没有指定HWND_TOPMOST或HWND_NOTOPMOST标志。
* 【的hWnd】标识的窗口不是活动窗口。
应用程序无法激活非活动窗口,也不能将其移动到Z顺序的顶部。应用程序可以在Z指令中更改激活窗口的位置,不受任何限制,也可以激活窗口,然后将其移动到最顶层或非最顶层窗口的顶部。
如果最上面的窗口重新定位到Z顺序的底部(HWND_BOTTOM)或任何非最上面的窗口之后,它不再是最高的。当最上面的窗口是非最高窗口时,其所有者及其拥有的窗口也是非最顶层的窗口。
非最顶层的窗口可以拥有最上面的窗口,但不能发生相反的情况。由最顶层的窗口所拥有的任何窗口(例如,对话框)本身都是最上面的窗口,以确保所有拥有的窗口保持在其所有者的上方。
如果应用程序不在前台,并且应该在前台,则必须调用SetForegroundWindow函数。
也可以看看