MFC-SetWindowPos改变窗口的尺寸,位置和Z序

发布时间 2023-04-26 10:54:34作者: 天子骄龙

 

    HWND hWnd = ::FindWindow(_T("Notepad"), NULL);//获取记事本窗口
    if (!hWnd) {
        AfxMessageBox(_T("请打开记事本"));
        ExitProcess(0);
    }
    
    BOOL b = ::SetWindowPos(hWnd, HWND_TOP, 100, 100, 500, 400, SWP_SHOWWINDOW);//改变窗口的尺寸,位置和Z序
    /*
    参数1:HWND hWnd    //窗口句柄
    参数2:HWND hWndInsertAfter   //窗口显示位置,见下表
            HWND_BOTTOM=1   将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶层位置,并且被置在其他窗口的底部
            HWND_NOTOPMOST=-2 将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用
            HWND_TOP=0,    将窗口置于Z序的顶部
            HWND_TOPMOST=-1,将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置
    参数3:int X   以hWnd客户坐标指定窗口新位置的左边界
    参数4:int Y   以hWnd客户坐标指定窗口新位置的顶边界
    参数5:int cx   宽度
    参数6:int cy   高度
    参数7:UINT 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
            
    */