dazhong

导航

VC++中SetWindowPos函数详解

函数功能:函数改一个子窗口,出式窗口式顶层窗口的尺寸,位置Z序。子窗口,出式窗口,及顶层窗口根据它在屏幕上出序排序、顶层窗口置的级别最高,并且被Z序的第一个窗口。

 

     函数原型:BOOL SetWindowPosHWN hWndHWND hWndlnsertAfter,int Xint Y,int cxint cy,UNITFlags);

 

     参数:

 

    hWnd:窗口句柄。

 

     hWndlnsertAfter:z序中的位于被置位的窗口前的窗口句柄。参数必须为一个窗口句柄,或下列之一:

 

     HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,窗口失去顶级位置,并且被置在其他窗口的底部。

 

     HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已是非顶层窗口则该标志不起作用。

 

     HWND_TOP:将窗口置于Z序的部。

 

     HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。

 

     g参数的使用方法,明部分。

 

     x:以客指定窗口新位置的左界。

 

     Y:以客指定窗口新位置的顶边界。

 

     cx:以像素指定窗口的新的度。

 

     cy:以像素指定窗口的新的高度。

 

     uFlags:窗口尺寸和定位的志。参数可以是下列合:

 

     SWP_ASNCWINDOWPOS:如果程不有窗口,系会向有窗口的线出需求。就防止线程在其他线理需求的生死

 

     SWP_DEFERERASE:防止WM_SYNCPAINT消息。

 

     SWP_DRAWFRAME:在窗口周画一个框(定在窗口描述中)。

 

     SWP_FRAMECHANGED窗口WM_NCCALCSIZE消息,即使窗口尺寸没有改也会消息。如果未指定志,只有在改了窗口尺寸WM_NCCALCSIZE

 

     SWP_HIDEWINDOW;藏窗口。

 

     SWP_NOACTIVATE:不激活窗口。如果未志,窗口被激活,并被置到其他最高窗口或非最高级组部(根据参数hWndlnsertAfter置)

 

     SWP_NOCOPYBITS:清除客区的所有内容。如果未该标志,客区的有效内容被保存并且在窗口尺寸更新和重定位后拷回客区。

 

     SWP_NOMOVE持当前位置(忽略XY参数)。

 

     SWP_NOOWNERZORDER:不改z序中的所有者窗口的位置。

 

     SWP_NOREDRAW:不重画改的内容。如果置了志,生任何重画作。适用于客区和非客区(包括标题栏滚动条)和任何由于窗回移而露出的父窗口的所有部分。如果置了志,程序必明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。

 

     SWP_NOREPOSITION;与SWP_NOOWNERZORDER志相同。

 

     SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。

 

     SWP_NOSIZE持当前尺寸(忽略cxCy参数)。

 

     SWP_NOZORDER持当前Z序(忽略hWndlnsertAfter参数)。

 

     SWP_SHOWWINDOW示窗口。

 

     返回:如果函数成功,返回值为非零;如果函数失,返回值为零。若想得更多错误消息,请调GetLastError函数。

 

     注:如果置了SWP_SHOWWINDOWSWP_HIDEWINDOW志,窗口不能被移和改大小。如果使用SetWindowLoog了窗口的某些数据,须调用函数SetWindowPos来作真正的改。使用下列的志:SWP_NOMOVEISWP_NOSIZEISWP_FRAMECHANGED

 

     有两方法将窗口设为顶层窗口:一是将参数hWndlnsertAfterHWND_TOPMOST并确保没有SWP_NOZORDER志;另一置窗口在Z序中的位置以使其在其他存在的窗口之上。当一个窗口被置顶层窗口,属于它的所有窗口均顶层窗口,而它的所有者的z序并不改

 

     如果HWND_TOPMOSTHWND_NOTOPMOST志均未指定,即用程序要求窗口在激活的同其在Z序中的位置,在参数hWndinsertAfter中指定的只有在下列条件中才使用:

 

     hWndlnsertAfter参数中没有HWND_NOTOPMOSTHWND_TOPMOST志。

 

     hWnd参数标识的窗口不是激活窗口。

 

     如果未将一个非激活窗口定到z序的端,用程序不能激活窗口。用程序可以无任何限制地改被激活窗口在Z序中的位置,或激活一个窗口并将其移到最高窗口的部或非最高窗口的部。

 

     如果一个顶层窗口被重定位到z序的底部(HWND_BOTTOM)或在任何非最高序的窗口之后,窗口就不再是最顶层窗口。当一个最顶层窗口被置非最顶级它的所有者窗口和所属者窗口均非最顶层窗口。

 

     一个非最端窗口可以有一个最端窗口,但反之不可以。任何属于顶层窗口的窗口(例如一个对话框)本身就被置为顶层窗口,以确保所有被属窗口都在它的所有者之上。

 

     如果用程序不在前台,但应该位于前台,就应调SetForegroundWindow函数来置。

 

     Windows CE:如果是一个可顶层窗口,并且未指定SWP_NOACTIVATE志,则这个函数将激活窗口、如果是当前的激活窗口,并且指定了SWP_NOACTIVATESWP_HIDEWINDOW志,激活另外一个可顶层窗口。

 

     当在个函数中的nFlags参数里指定了SWP_FRAMECHANGEDWindowsCE重画窗口的整个非客区,可能会改区的大小。也是重新算客区的唯一途径,也是通过调SetwindowLong函数改窗口格后通常使用的方法。

 

     SetWindowPos将使WM_WINDOWPOSCHANGED消息向窗口送,在个消息中传递志与传递给函数的相同。个函数不传递其他消息。

 

     Windows CE 1.0不支持在hWndlnsertAber参数中的HWND_TOPMOSTHWND_NOTOPMOST常量。

posted on 2009-09-30 12:59  大钟  阅读(472)  评论(0)    收藏  举报