Windows API 之SetWindowPos

本文介绍了SetWindowPos函数的基本用法,包括如何通过指定参数改变窗口的位置、大小和垂直顺序。提供了实例代码演示如何获取当前屏幕工作区域以方便设置宽和高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SetWindowPos 可以改变窗体位置

 引用:

        /// <summary>
        /// 该函数改变一个窗口的大小、坐标、垂直顺序
        /// </summary>
        /// <param name="hWnd">目标窗口句柄</param>
        /// <param name="hWndInsertAfter">枚举值(垂直顺序)</param>
        /// <param name="x">x坐标</param>
        /// <param name="y">y坐标</param>
        /// <param name="Width">宽</param>
        /// <param name="Height">高</param>
        /// <param name="flags">枚举</param>
        /// <returns></returns>
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static public extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int Width, int Height, uint flags);

hWndInsertAfter 枚举值:

/// <summary>
        /// hWndInsertAfter 枚举
        /// </summary>
        public enum WindowsZOrder
        {
            HWND_BOTTOM = 1,
            HWND_NOTOPMOST = -2,
            HWND_TOP = 0,
            HWND_TOPMOST = -1
        }


Windows flags 枚举:

public enum WindowsFlags
        {
            //flags 参数可选值:
            SWP_ASYNCWINDOWPOS = 0x4000, //若调用进程不拥有窗口, 系统会向拥有窗口的线程发出需求
            SWP_DEFERERASE = 0x2000, //防止产生 WM_SYNCPAINT 消息
            SWP_DRAWFRAME = 0x0020, //画边框
            SWP_FRAMECHANGED = 0x0020, //强制发送 WM_NCCALCSIZE 消息, 一般只是在改变大小时才发送此消息
            SWP_HIDEWINDOW = 0x0080, //隐藏窗口
            SWP_NOACTIVATE = 0x0010, //不激活
            SWP_NOCOPYBITS = 0x0100, //丢弃客户区
            SWP_NOMOVE = 0x0002, //忽略 X、Y, 不改变位置
            SWP_NOOWNERZORDER = 0x0200, //忽略 hWndInsertAfter, 不改变 Z 序列的所有者
            SWP_NOREDRAW = 0x0008, //不重绘
            SWP_NOREPOSITION = 0x0200, //忽略 hWndInsertAfter, 不改变 Z 序列的所有者
            SWP_NOSENDCHANGING = 0x0400, //不发出 WM_WINDOWPOSCHANGING 消息
            SWP_NOSIZE = 0x0001, //忽略 cx、cy, 保持大小
            SWP_NOZORDER = 0x0004, //忽略 hWndInsertAfter, 保持 Z 顺序
            SWP_SHOWWINDOW = 0x0040 //显示窗口
        }

调用时,可先获取当前屏幕工作区域,已方便设置宽和高,例如:

Screen currentScreen = Screen.FromHandle((IntPtr)); //多屏时可以获取当前屏幕
System.Drawing.Rectangle currentRectangle = currentScreen.WorkingArea;
int widht = currentRectangle.Width;
int height = crrentRectangle.Height;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值