返回顶部

收藏

C#窗体移动

更多
#region 窗体移动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 const int SC_MOVE = 0xF010;
       public const int HTCAPTION = 0x0002;
       [DllImport("user32")]
       private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
       private const int WM_SETREDRAW = 0xB;
       #endregion

//窗体拖拽(包含双击最大化,根据两次点击的point判断是拖拽还是双击、坐标保存在SetForm.Tag)
           textBox1.MouseDown += delegate
           {
               if (this.Tag != null && ((int[])this.Tag)[0] == Control.MousePosition.X && ((int[])this.Tag)[1] == Control.MousePosition.Y)
               {

                       if (this.WindowState != FormWindowState.Maximized)
                       {
                           this.Opacity = 0;
                           this.Tag = null;
                           this.WindowState = FormWindowState.Maximized;
                       }
                       else
                       {
                           this.Tag = null;
                           this.WindowState = FormWindowState.Normal;
                           //InvalidateRect(IntPtr.Zero, IntPtr.Zero, true);
                       }

               }
               else
               {
                   this.Tag = new int[2] { Control.MousePosition.X, Control.MousePosition.Y };
               }
               //刷新桌面
               if (this.WindowState == FormWindowState.Normal)
               {
                   ReleaseCapture();
                   SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
               }
           };
//该片段来自于http://outofmemory.cn

标签:c#,.net,控件

收藏

0人收藏

支持

0

反对

0

发表评论