Windows API之SetWindowPos

函数原型 BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx, int cy,UINT nFlags);

 

函数功能:

调用这个成员函数以改变子窗口、弹出窗口和顶层窗口的大小、位置和Z轴次序。窗口在屏幕上按照它们的Z轴次序排序。在Z轴次序上处于顶端的窗口将程序在所有其它窗口的顶部。子窗口的所有坐标都是客户坐标(相对于父窗口客户区的左上角)。窗口可以被移动到Z轴次序的顶部,既可以通过将pWndInsertAfter参数设为&wndTopMost,并确保没有设置SWP_NOZORDER标志,也可以通过设置窗口的Z轴次序使它位于所有现存的顶层窗口上方。当一个非顶层窗口被设为顶层窗口时,它拥有的窗口也被设为顶层的。它的拥有者不发生变化。如果顶层窗口被重新定位到Z轴次序的底部(&wndBottom)或任何非顶层窗口之后,则它将不再是顶层窗口。当顶层窗口被变为非顶层窗口时,它所有的拥有者和它拥有的所有窗口都被变为非顶层窗口。

 

参数:

      pWndInsertAfter

标识了在Z轴次序上位于这个CWnd对象之前的CWnd对象。这个参数可以是指向CWnd对象的指针,也可以是指向下列值的指针:

wndBottom 将窗口放在Z轴次序的底部。如果这个CWnd是一个顶层窗口,则窗口将失去它的顶层状态;系统将这个窗口放在其它所有窗口的底部。

wndTop 将窗口放在Z轴次序的顶部。

wndTopMost 将窗口放在所有非顶层窗口的上面。这个窗口将保持它的顶层位置,即使它失去了活动状态。

wndNoTopMost 将窗口重新定位到所有非顶层窗口的顶部(这意味着在所有的顶层窗口之下)。这个标志对那些已经是非顶层窗口的窗口没有作用。有关这个函数以及这些参数的使用规则参见说明部分。

x指定了窗口左边的新位置。

y指定了窗口顶部的新位置。

cx指定了窗口的新宽度。

cy指定了窗口的新高度。

nFlags指定了大小和位置选项。这个参数可以是下列值的组合:

SWP_DRAWFRAME 围绕窗口画出边框(在创建窗口的时候定义)。

SWP_FRAMECHANGED 向窗口发送一条WM_NCCALCSIZE消息,即使窗口的大小不会改变。如果没有指定这个标志,则仅当窗口的大小发生变化时才发送WM_NCCALCSIZE消息。

SWP_HIDEWINDOW 隐藏窗口。

SWP_NOACTIVATE 不激活窗口。如果没有设置这个标志,则窗口将被激活并移动到顶层或非顶层窗口组(依赖于pWndInsertAfter参数的设置)的顶部。

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 保持当前的次序(忽略pWndInsertAfter)。

SWP_SHOWWINDOW 显示窗口。

 

c#引用与参数说明

     static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);

static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);

static readonly IntPtr HWND_TOP = new IntPtr(0);

const UInt32 SWP_NOSIZE = 0x0001;

const UInt32 SWP_NOMOVE = 0x0002;

const UInt32 SWP_NOZORDER = 0x0004;

const UInt32 SWP_NOREDRAW = 0x0008;

const UInt32 SWP_NOACTIVATE = 0x0010;

const UInt32 SWP_FRAMECHANGED = 0x0020;

const UInt32 SWP_SHOWWINDOW = 0x0040;

const UInt32 SWP_HIDEWINDOW = 0x0080;

const UInt32 SWP_NOCOPYBITS = 0x0100;

const UInt32 SWP_NOOWNERZORDER = 0x0200;

const UInt32 SWP_NOSENDCHANGING = 0x0400;

const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;

 

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]

static extern bool SetWindowPos(

IntPtr hWnd,

IntPtr hWndInsertAfter,

int X,

int Y,

int cx,

int cy,

uint uFlags

);

 

public void ShowWindowWithRepaint(bool show, bool activate)
       {
           uint num2 = 64u;
           if (!show)
           {
               num2 = 128u;
           }
           if (!activate)
           {
               num2 |= 16u;
           }

           SetWindowPos(new HandleRef(this, base.Handle), Win32NativeMethods.NullHandleRef, 0, 0, 0, 0,num2 | 2u | 1u | 4u | 512u | 256u);
       }

你可能感兴趣的:(windows,程序,轴,的)