using System.Runtime.InteropServices;
namespace System.Windows.Forms
{
class moveform
{
#region 變量聲明
private bool isMouse = false; //記錄是否按下
private int mousedownleft = 0;
private int mousedowntop = 0;
public System.Windows.Forms.Form form1 = null;
#endregion
///
/// 移動窗口類不使用api移動
///
/// System.Windows.Forms.Form
/// 在窗體的構造函數裏 moveform mf=new moveform(this)
public moveform( System.Windows.Forms.Form winform)
{
form1 = winform;
if (form1==null)
{
MessageBox.Show(" public System.Windows.Forms.Form對象沒有實例化");
return;
}
else
{
form1.MouseDown+=new MouseEventHandler(MouseDownEvent);
form1.MouseMove+=new MouseEventHandler(MouseMoveEvent);
form1.MouseUp+=new MouseEventHandler(MouseUpEvent);
}
}
#region win32 api 移動窗體
[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;
///
/// 使用api移動
///
///
///
//在窗體的構造函數裏 moveform mf=new moveform(this,true)
public moveform(System.Windows.Forms.Form form1s,bool win32api)
{
form1 = form1s;
if (form1==null)
{
MessageBox.Show(" public System.Windows.Forms.Form對象沒有實例化");
return;
}
else
{
form1.MouseDown += new MouseEventHandler(WinApiMoveEvent);
}
}
private void WinApiMoveEvent(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(form1.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
#endregion
private void MouseDownEvent(object sender, System.Windows.Forms.MouseEventArgs e)
{
isMouse = true;
mousedownleft = GetMouseXY().X - form1.Left;
mousedowntop = GetMouseXY().Y - form1.Top;
}
private void MouseMoveEvent(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (isMouse==false)
{
return;
}
form1.Left = GetMouseXY().X - mousedownleft;
form1.Top = GetMouseXY().Y - mousedowntop;
}
private void MouseUpEvent(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (isMouse==true) //如果還是真
{
isMouse = false;
}
}
///
/// 獲取鼠標座標
///
///
private System.Drawing.Point GetMouseXY()
{
System.Drawing.Point xy = new System.Drawing.Point(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y);
return xy;
}
}
}
http://www.cm1212.com
演示代碼下載 點擊打開鏈接