需要用到Windows的两个API函数,为ReleaseCapture和SendMessage。
使用系统API函数时,需要using System.Runtime.InteropServices;
将窗体的FormBorderStyle属性设置为None,可以把窗体设置为无边框窗体。
在Form1中添加事件,Form1_MouseDown
主要代码如下:
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwdn, int wMsg, int mParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;//该变量表示将向Windows发送的消息类型
public const int SC_MOVE = 0xF010;//该变量表示发送消息的附加消息
public const int HTCAPTION = 0x0002;//该变量表示发送消息的附加消息
public Form1()
{
InitializeComponent();
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();//用来释放被当前线程中某个窗口捕获的光标
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);//向Windows发送拖动窗体的消息
}
效果显示如下: