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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM