函数原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);
用到SetWindowPos的时候,windows API解释还不够详细,主要是hWndlnsertAfter和Flags 的值没详细介绍,此处做个记录:
hWndInsertAfter在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:
//hWndInsertAfter 参数可选值:
HWND_TOP = 0; {在前面}
HWND_BOTTOM = 1; {在后面}
HWND_TOPMOST = HWND(-1); {在前面, 位于任何顶部窗口的前面}
HWND_NOTOPMOST = HWND(-2); {在前面, 位于其他顶部窗口的后面}
uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
SWP_NOSIZE=1 <0x1>; {忽略 cx、cy, 保持大小}
SWP_NOMOVE=2 <0x2>; {忽略 X、Y, 不改变位置}
SWP_NOZORDER=4 <0x4>; {忽略 hWndInsertAfter, 保持 Z 顺序}
SWP_NOREDRAW=8 <0x8>; {不重绘}
SWP_NOACTIVATE=16 <0x10>; {不激活}
SWP_FRAMECHANGED=32 <0x20>; {强制发送 WM_NCCALCSIZE 消息, 一般只是在改变大小时才发送此消息}
SWP_SHOWWINDOW=64 <0x40>; {显示窗口}
SWP_HIDEWINDOW=128 <0x80>; {隐藏窗口}
SWP_NOCOPYBITS=256 <0x100>; {丢弃客户区}
SWP_NOOWNERZORDER=512 <0x200>; {忽略 hWndInsertAfter, 不改变 Z 序列的所有者}
SWP_NOSENDCHANGING=1024 <0x400>; {不发出 WM_WINDOWPOSCHANGING 消息}
SWP_DRAWFRAME = SWP_FRAMECHANGED; {画边框}
SWP_NOREPOSITION = SWP_NOOWNERZORDER;{}
SWP_DEFERERASE=8192 <0x2000>; {防止产生 WM_SYNCPAINT 消息}
SWP_ASYNCWINDOWPOS=16384 <0x4000>; {若调用进程不拥有窗口, 系统会向拥有窗口的线程发出需求}
C#枚举
[Flags]
public enum WindowFlag : int
{
NOSIZE = 1,
NOMOVE = 2,
NOZORDER = 4,
NOREDRAW = 8,
NOACTIVATE = 16,
FRAMECHANGED = 32,
SHOWWINDOW = 64,
HIDEWINDOW = 128,
NOCOPYBITS = 256,
NOOWNERZORDER = 512,
NOSENDCHANGING = 1024,
DRAWFRAME = 32,
NOREPOSITION = 512,
DEFERERASE = 8192,
ASYNCWINDOWPOS = 16384
}