主要用到两个API函数:ReleaseCapture()和SendMessage().
ReleaseCapture用来释放被当前线程中某个窗口捕获的光标。
SendMessage是向指定的窗体发送消息。
在窗体的MouseDown事件中写即可:
Delphi:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(self.Handle,WM_SYSCOMMAND,SC_MOVE or HTCAPTION,0); end;
C#:
加入程序集:using System.Runtime.InteropServices;
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsFormsApplication6 { public partial class Form2 : Form { [DllImport("user32.dll", EntryPoint = "ReleaseCapture")] private static extern bool ReleaseCapture(); [DllImport("user32", EntryPoint = "SendMessage")] private static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); const int WM_SYSCOMMAND = 0x0112; const int SC_MOVE = 61456; const int HTCAPTION = 2; public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Hide(); this.Close(); } private void Form2_Load(object sender, EventArgs e) { } private void Form2_MouseDown(object sender, MouseEventArgs e) { ReleaseCapture(); SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION,0); } } }