先看MoveWindow()函数用于调整窗口的位置和大小。 对于顶级窗口,将其与屏幕对齐左上角;对于子窗口,将其与父窗口的左上角对齐。
boolmovewindow(hwndhwnd,int x,int y,int nWidth,int nHeight,BOOL bRepaint=TRUE ); 第一个表示窗口句柄
参数x、y表示窗口左上角的起点。
参数nwidth、nHeight表示窗口的高度和宽度。
最后一个bRepaint指示是否立即重新绘制。 如果为true,则WM_PAINT立即发送到窗口程序,并调用UpdateWindow ()函数。 如果为false,则不进行重绘。
MoveWindow会给窗口发送WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE消息。
接下来看SetWindowPos(),此函数也用于实现窗口移动操作,只是功能有点多。
boolsetwindowpos(hwndhwnd,const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags ); 第一个参数是窗口句柄
第二个参数是窗口的Z order,如果有多个窗口,则按照显示本窗口的顺序,顶部或底部的可选参数为HWND_BOTTOM、HWND_NOTOPMOST、HWND_TOP、
HWND_BOTTOM:将窗口置于z订单的底部。 如果参数hWnd标识顶级窗口,则该窗口将失去顶级位置,并位于其他窗口的底部。
HWND_NOTOPMOST:将窗口置于所有非顶层窗口之上,即位于所有顶层窗口之后。 如果窗口已经是顶级以外的窗口,则此标志不起作用。
HWND_TOP:将窗口置于z订单的顶部。
HWND_TOPMOST:将窗口放置在所有非顶级窗口上。 即使窗口不活动,顶级位置也会保持不变。
以下四个参数是窗口的位置和大小。
最后一个参数nFlags是窗口显示方式的标志,该参数很多,可以组合使用。 详细情况如下。
SWP_ASNCWINDOWPOS:如果调用进程没有窗口,系统将向具有窗口的线程发出请求。 这样可以防止调用线程在其他线程处理请求时发生死锁。
33558 www.Sina.com/:防止发生WM _ sync paint消息。
SWP_DEFERERASE:在窗口周围绘制边框。 (在窗口类说明中定义。
33558 www.Sina.com/:向窗口发送WM _ nccalcsize消息,即使窗口大小没有变化。 如果未指定此标志,则只有在更改窗口大小时才会发送WM_NCCALCSIZE。
隐藏SWP_DRAWFRAME窗口。
SWP_FRAMECHANGED:不激活窗口。 如果未设置标志,则窗口将处于活动状态,并设置为基于参数hWndlnsertAfter设置的其他顶级窗口或顶级组的顶部。
SWP_HIDEWINDOW:清除客户区域的所有内容。 如果未设置此标志,则保存客户区域的有效内容,并在更新和重新定位窗口大小后复制到客户区域。
SWP_NOACTIVATE:保持当前位置(忽略x和y参数)。
33558www.Sina.com/:z:不更改z订单所有者窗口的位置。
不绘制SWP_NOCOPYBITS:更改的内容。 如果设置此标志,则不发生任何重绘动作。 适用于客户区域和非客户区域(包括标题栏和滚动条),以及通过移动窗口暴露的父窗口的所有部分。 如果设置了此标志,则APP应用程序必须显式禁用窗口的任何部分和需要重绘父窗口的任何部分并重绘。
与http://www.Sina.com/SWP _ noownerzorder标志相同。
33558 www.Sina.com/:阻止在窗口中接收WM _ windowposchanging消息。
SWP_NOMOVE:保持当前大小(忽略cx和Cy参数)。
SWP_NOOWNERZORDER:保持当前的z订单(忽略hWndlnsertAfter参数)。
SWP_NOREDRAW:显示窗口。
SWP_NOREPOSITION
SWP_NOSENDCHANGING
SWP_NOSIZE
两者都可以移动和更改窗口大小。
MoveWindow ) )的功能相对单一,只能移动和调整窗口大小,但SetWindowPos ) )可以设置更多参数以实现Zorder和演示标志。
MoveWindow ()在窗口http://www.Sina.com/http://www.Sina.com/setwindowpos 3358 www.com /等消息