WinForm 无边框窗体改变尺寸及移动窗体

 #region 无边框窗体移动改变大小

        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();
        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

        public const int WM_SYSCOMMAND = 0x0112;
        public const int SC_MOVE = 0xF010;
        public const int HTCAPTION = 0x0002;
        const int HTLEFT = 10;
        const int HTRIGHT = 11;
        const int HTTOP = 12;
        const int HTTOPLEFT = 13;
        const int HTTOPRIGHT = 14;
        const int HTBOTTOM = 15;
        const int HTBOTTOMLEFT = 0x10;
        const int HTBOTTOMRIGHT = 17;

        public bool ManualResize
        {
            get
            {
                return this.FormBorderStyle == System.Windows.Forms.FormBorderStyle.None
                    && this.WindowState == FormWindowState.Normal;
            }
        }

        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0084:
                    base.WndProc(ref m);
                    if (ManualResize)
                    {
                        Point vPoint = new Point((int)m.LParam & 0xFFFF,
                            (int)m.LParam >> 16 & 0xFFFF);
                        vPoint = PointToClient(vPoint);
                        if (vPoint.X <= 5)
                            if (vPoint.Y <= 5)
                                m.Result = (IntPtr)HTTOPLEFT;
                            else if (vPoint.Y >= ClientSize.Height - 5)
                                m.Result = (IntPtr)HTBOTTOMLEFT;
                            else m.Result = (IntPtr)HTLEFT;
                        else if (vPoint.X >= ClientSize.Width - 5)
                            if (vPoint.Y <= 5)
                                m.Result = (IntPtr)HTTOPRIGHT;
                            else if (vPoint.Y >= ClientSize.Height - 5)
                                m.Result = (IntPtr)HTBOTTOMRIGHT;
                            else m.Result = (IntPtr)HTRIGHT;
                        else if (vPoint.Y <= 5)
                            m.Result = (IntPtr)HTTOP;
                        else if (vPoint.Y >= ClientSize.Height - 5)
                            m.Result = (IntPtr)HTBOTTOM;
                    }
                    break;
                case 0x0201:    //鼠标左键按下的消息
                    if (ManualResize)
                    {
                        m.Msg = 0x00A1;    //更改消息为非客户区按下鼠标
                        m.LParam = IntPtr.Zero;    //默认值
                        m.WParam = new IntPtr(2);    //鼠标放在标题栏内
                    }
                    base.WndProc(ref m);
                    break;
                default:
                    try
                    {
                        base.WndProc(ref m);
                    }
                    catch (Exception) { }
                    break;
            }
        }
        #endregion

原文地址:https://www.cnblogs.com/yc1224/p/12071963.html

时间: 2024-10-08 14:55:05

WinForm 无边框窗体改变尺寸及移动窗体的相关文章

C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置

C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务栏从而移动窗体 新建窗体用于测试 方法一 1.定义一个位置信息Point用于存储鼠标位置 1 private Point mPoint; 2.给窗体等控件增加MouseDown和MouseMove事件 1 /// <summary> 2 /// 鼠标按下 3 /// </summary>

C#WinForm无边框窗体移动----模仿鼠标单击标题栏移动窗体位置

C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务栏从而移动窗体 新建窗体用于测试 方法一 1.定义一个位置信息Point用于存储鼠标位置 1 private Point mPoint; 2.给窗体等控件增加MouseDown和MouseMove事件 1 /// <summary> 2 /// 鼠标按下 3 /// </summary>

Winform 无边框窗口移动自定义边框粗细颜色

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace Wi

WinForm 无边框窗体和timer控件

一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式 如何获取图片的相对路径Application.StartupPath + "\\..\\..\\images\\btn_close_highlight.png" \..\文件夹名称... 向上翻一个文件夹 2.如何让窗体动起来调用窗体移动的API 如果有其它控件覆盖了窗体,那么写好鼠标按下的事件委托

winform 无边框窗体

一.无边框窗体1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式Mouseenter鼠标进入Mouseleave鼠标移出Mousedown鼠标按下 改变样式代码: pictureBox1.BackgroundImage = Image.FromFile(Application.StartupPath + "\\..\\..\\images\\btn_close_disable

winform无边框窗口拖动

无边框的窗口想拖动,只需要在置顶的容器上添加对应的mousedown 和 mousemove 事件就可以实现了.代码如下: 1 //拖动窗口 2 private Point mPoint = new Point(); 3 4 private void panel1_MouseDown(object sender, MouseEventArgs e) 5 { 6 mPoint.X = e.X; 7 mPoint.Y = e.Y; 8 } 9 10 private void panel1_Mouse

WINFORM 无边框窗体 阴影与移动

//窗体移动API[DllImport("user32.dll")]public static extern bool ReleaseCapture();[DllImport("user32.dll")]public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int IParam);public const int WM_SYSCOMMAND = 0x0112;public c

winform无边框窗体点击任务栏最小化

protected override CreateParams CreateParams { get { const int WS_MINIMIZEBOX = 0x00020000; // Winuser.h中定义 CreateParams cp = base.CreateParams; cp.Style = cp.Style | WS_MINIMIZEBOX; // 允许最小化操作 return cp; } }

Winform无边框窗体拖动

调用示例 当然,BUG还是有的,不过基本需求倒也可以 原文地址:https://www.cnblogs.com/rbzz/p/9183269.html