C# 重写鼠标移动窗体事件

C# 重写鼠标移动窗体事件
using System.Runtime.InteropServices;
 
        [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;
 
         <summary>
         重写WndProc方法,实现窗体移动和禁止双击最大化
         </summary>
         <param name="m">Windows 消息</param>
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x4e:
                case 0xd:
                case 0xe:
                case 0x14:
                    base.WndProc(ref m);
                    break;
                case 0x84://鼠标点任意位置后可以拖动窗体
                    this.DefWndProc(ref m);
                    if (m.Result.ToInt32() == 0x01)
                    {
                        m.Result = new IntPtr(0x02);
                    }
                    break;
                case 0xA3://禁止双击最大化
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }
 
        private void ribbonControl1_MouseDown(object sender, MouseEventArgs e)
        {
            ReleaseCapture();
            SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); 
        }
 
        private void MainForm_Resize(object sender, EventArgs e)
        {
            Region region = null;
            switch (this.WindowState)
            {
                case FormWindowState.Maximized:
                    region = new Region(this.ClientRectangle);
                    break;
                case FormWindowState.Normal:
                    using (GraphicsPath path = new GraphicsPath())
                    {
                        int r = 16;
                        path.AddArc(0, 0, r, r, 180, 90);
                        path.AddArc(this.Width - r - 1, 0, r, r, 270, 90);
                        path.AddArc(this.Width - r - 1, this.Height - r - 1, r, r, 0, 90);
                        path.AddArc(0, this.Height - r - 1, r, r, 90, 90);
                        region = new Region(path);
                    }
                    break;
                default:
                    return;
            }
 
            this.Region = region;
        }
posted @ 2017-09-04 15:08  leefafa  阅读(1530)  评论(0编辑  收藏  举报