SetWindowPos

SetWindowPos    //设置窗口显示z次序位置

//函数原型:
    WINUSERAPI BOOL WINAPI SetWindowPos(
    HWND     hWnd,    //窗口句柄
    HWND     hWndInsertAfter,//窗口显示位置,见下表
    int     X,        //x坐标
    int     Y,        //y坐标
    int     cx,        //宽度
    int     cy,        //高度
    UINT     uFlags    //窗口尺寸和定位的标志,见下表
    );
    
    
//参数表1:hWndInsertAfter 有下列值
    1。HWND_BOTTOM:    //值为1,    将窗口置于Z序的底部。
    2。HWND_NOTOPMOST:    //值为-2,将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。
    3。HWND_TOP:        //值为0,    将窗口置于Z序的顶部。
    4。HWND_TOPMOST:    //值为-1,将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。


//参数表2:uFlags 
    SWP_ASYNCWINDOWPOS:    //如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。
    SWP_DEFERERASE;    //防止产生WM_SYSNCPAINT消息
    SWP_DRAWFRAME:        //在窗口周围画个边框(定义在窗口类中描述)
    SWP_FRAMECHANGED:    //给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没改变也发送
    SWP_HIDEWINDOW:        //隐藏窗口
    SWP_NOACTIVATE:        //不激活窗口
    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:        //维持当前Z序
    SWP_SHOWWINDOW:        //显示窗口
    
    
返回值:
    成功返回非0,失败返回0,获取错误用GetLastError();
    
    
win32 实例:

    HWND hToolBar = GetDlgItem(m_hWnd, IDC_TOOLBAR1);    //获取工具栏句柄
    if (SendMessage(hToolBar, TB_GETSTATE, ID_BTN_TOP, 0)&TBSTATE_CHECKED)//获取工具栏按钮的状态
        SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);//窗口置顶
    else
        SetWindowPos(m_hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);//取消置顶
    break;
    
MFC 原型
    BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx, int cy,UINT nFlags);
    
示例:
    int cx = GetSystemMetrics(SM_CXSCREEN);
    int cy = GetSystemMetrics(SM_CYSCREEN);

    int dx = 600;
    int dy = 400;

    SetWindowPos(&wndBottom,cx-dx,cy-dy,dx,dy,SWP_NOACTIVATE); //设置广告窗口浮动于右下角
    
c# 用法
    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    static extern bool SetWindowPos(    
    IntPtr hWnd,    
    IntPtr hWndInsertAfter,    
    int X,    
    int Y,    
    int cx,    
    int cy,    
    uint uFlags    
    );
    
    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;

 

posted @ 2021-06-10 22:42  初吻给了烟灬  阅读(2461)  评论(0编辑  收藏  举报