羽叶 发表于 2013-6-10 22:51:29

C# WInForm 无框窗体移动

调用API
using System.Runtime.InteropServices;
public static extern bool ReleaseCapture();

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;在控件的_MouseDown中加入如下代码:private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
   {
      ReleaseCapture();
      SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
   }

t304pk 发表于 2013-6-12 06:20:21

Good Old Trick {:3_48:}

xiaomei 发表于 2013-6-13 11:57:39

不错,呵呵,谢谢楼主分享

gqzhao 发表于 2013-6-18 10:01:26

学习了,支持楼主的奉献精神。

rakehell 发表于 2013-10-15 13:47:44

学习学习!

aolongxue 发表于 2013-10-18 00:32:18

很不错!!!支持一下楼主

lycoder 发表于 2013-10-22 17:58:36

很好...GOOD 一个...

智龙 发表于 2013-12-2 09:52:29

谢谢楼主分享

ibm2000 发表于 2013-12-2 13:31:33

感谢楼主分享!

15028046850 发表于 2017-5-15 10:52:09

ibm2000 发表于 2013-12-2 13:31
感谢楼主分享!


如果不想用引用的话 可以这样
private Point offset;
      private void BudgetSheetForm_MouseDown(object sender, MouseEventArgs e)
      {
            if (MouseButtons.Left != e.Button) return;
            Point cur = this.PointToScreen(e.Location);
            offset = new Point(cur.X - this.Left, cur.Y - this.Top);
      }
      private void BudgetSheetForm_MouseMove(object sender, MouseEventArgs e)
      {
            if (MouseButtons.Left != e.Button) return;
            Point cur = MousePosition;
            this.Location = new Point(cur.X - offset.X, cur.Y - offset.Y);
      }
页: [1]
查看完整版本: C# WInForm 无框窗体移动