描述
更改子窗口、弹出窗口或顶层窗口的大小、位置和z顺序.这些窗口根据屏幕上的外观排列.最上面的窗口接收最高等级,是Z阶的第一个窗口.
FreeBASIC 语法
FUNCTION SetWindowPos ( _ BYVAL hwnd AS HWND, _ BYVAL hwndInsertAfter AS HWND, _ BYVAL x AS LONG, _ BYVAL y AS LONG, _ BYVAL cx AS LONG, _ BYVAL cy AS LONG, _ BYVAL uFlags AS UINT _ ) AS WINBOOL |
参数
hwnd
[in]窗口的句柄.
hwndInsertAfter
[in]窗口的句柄进行定位窗口在Z序.此参数必须是窗口句柄或下列值之一.
Value |
Meaning |
HWND_BOTTOM 1??? |
将窗口放置在z顺序的底部.如果hWnd参数标识了一个顶层窗口,窗口失去其最高的地位和被放置在其他窗口的底部. |
HWND_NOTOPMOST &HFFFFFFFF??? |
将窗口放在所有非顶层窗口(也就是所有顶层窗口的后面).如果窗口已是非最顶层窗口,则此标志不会起作用. |
HWND_TOP 0??? |
将窗口放置在z顺序的顶部. |
HWND_TOPMOST &HFFFFFFFE??? |
将窗口置于所有非顶层窗口之上.窗口保持其顶部位置,即使当它被停用. |
为更多的信息关于这个参数的使用,看下面的备注节.
X
[in]的窗口左侧的新位置,在客户区坐标.
Y
[in]窗口的上方新的位置,在客户区坐标.
cx
[in]窗口的新的宽度,以像素为单位.
cy
[in]窗口的新的高度,以像素为单位.
uFlags
[in]窗口的大小和位置的标志.此参数可以是下列值的组合.
Value |
Meaning |
SWP_ASYNCWINDOWPOS &H4000??? |
如果调用线程和拥有该窗口的线程连接到不同的输入队列,则系统将请求发送到拥有该窗口的线程.这阻止调用线程阻止其执行,而其他线程处理请求. |
SWP_DEFERERASE &H2000??? |
防止产生的WM_SYNCPAINT消息. |
SWP_DRAWFRAME &H0020??? |
在窗口周围绘制一个框架(定义在窗口的类描述中). |
SWP_FRAMECHANGED &H0020??? |
应用新的框架样式设置使用SetWindowLong功能.WM_NCCALCSIZE发送消息给窗口,如果窗口的大小是不变的.如果不指定此标志,只有当WM_NCCALCSIZE发送窗口的大?桓谋? |
SWP_HIDEWINDOW &H0080??? |
隐藏窗口. |
SWP_NOACTIVATE &H0010??? |
不激活窗口.如果未设置此标志,窗口被激活和感动是最高的或非顶层组顶部(根据不同的hWndInsertAfter参数的设置). |
SWP_NOCOPYBITS &H0100??? |
丢弃客户端区域的全部内容.如果不指定此标志,客户区的有效内容保存和复制到客户区窗口的大小或重新定位后. |
SWP_NOMOVE &H0002??? |
保留当前位置(忽略X和Y参数). |
SWP_NOOWNERZORDER &H0200??? |
不更改所有者窗口在z顺序中的位置. |
SWP_NOREDRAW &H0008??? |
不重绘的变化.如果设置了这个标志,没有再发生任何.适用于客户区,非客户区(包括标题栏和滚动条),和父窗口发现由于窗口被移动的任何部分.当这个标志被设置,应用程序必须明确无效或重画部分窗口和父窗口需要重画. |
SWP_NOREPOSITION &H0200??? |
同SWP_NOOWNERZORDER旗. |
SWP_NOSENDCHANGING &H0400??? |
防止窗口接收消息的WM_WINDOWPOSCHANGING. |
SWP_NOSIZE &H0001??? |
保持电流的大?ê雎?span style="font-style: italic;">cx和cy参数). |
SWP_NOZORDER &H0004??? |
保留当前的Z顺序(忽略hWndInsertAfter参数). |
SWP_SHOWWINDOW &H0040??? |
显示窗口. |
返回值
如果函数成功,返回值为非零值.
如果函数失败,返回值为零.为了获得更多的错误信息,调用GetLastError.
备注
作为Vista重新架构的一部分,所有服务都从交互桌面移出到会话0中.hwnd和窗口管理器的操作是唯一有效的内部会议和跨会话试图操纵hwnd会失败.有关更多信息,参见< a href ='http://msdn.microsoft.com/en-us/library/aa480152.aspx'class='链接'> Windows Vista开发的故事:应用程序兼容性食谱</a>.
如果你已经改变了某些窗口的数据使用SetWindowLong / SetWindowLongPtr,您必须更改生效SetWindowPos.使用以下组合:SWP_NOMOVE uFlags | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.
一个窗口可以通过设置hwndInsertAfter参数HWND_TOPMOST保证不把SWP_NOZORDER旗是顶层窗口,或通过设置在Z顺序窗口的位置高于任何现有的顶层窗口.当一个非顶层窗口被做成最顶层时,它所拥有的窗口也被做成最顶层.它的所有者,但是,没有改变.
如果没有SWP_NOACTIVATE也SWP_NOZORDER标志指定(即,当应用程序请求一个窗口被同时激活,其位置在Z顺序改变),指定在hwndInsertAfter值仅用于下列情况.
· | Neither the HWND_TOPMOST nor HWND_NOTOPMOST flag is specified in hwndInsertAfter. |
· | The window identified by hwnd is not the active window. |
应用程序不能激活非活动窗口,也不必将其置于z顺序的顶部.应用程序可以在没有限制的情况下改变激活的窗口在z顺序中的位置,或者它可以激活一个窗口,然后将其移动到顶层或非顶层窗口的顶部.
如果一个顶层窗口被重新定位到Z顺序的底部(HWND_BOTTOM)或任何非顶层窗口后,它不再是最高的.当一个顶层窗口被做成非最顶层时,它的所有者和拥有的窗口也被做成非最顶层的窗口.
非顶层窗口可以拥有顶层窗口,但反向不能出现.由顶层窗口拥有的任何窗口(例如,对话框)本身都是一个最顶层的窗口,以确保所有拥有的窗口都保持在其所有者之上.
如果应用程序不在前台,并应在前台,它必须调用SetForegroundWindow功能.
使用SetWindowPos带窗口的顶部,拥有窗口必须有SetForegroundWindow许可的过程.
用法示例
SetWindowPos(hwnd, NULL, 0, 0, cx, cy, SWP_NOZORDER OR SWP_NOMOVE OR SWP_NOACTIVATE)
引用文件
CWindow.inc