zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/yc1224/p/12071963.html
Copyright © 2011-2022 走看看