c# 實現用滑鼠拖動沒有標題欄的視窗(窗體的任何部分都可實現拖動效果)
上面形式的窗體,實現窗體的任何部分都可實現拖動
首先需要引入非託管程式碼,直接呼叫windows api
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd,
int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
DllImportAttribute微軟官網msdn解釋為:
指示該屬性化方法由非託管動態連結庫 (DLL) 作為靜態入口點公開。
然後再在窗體的Form_MouseDown事件下新增如下程式碼
private void Form_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
還需要注意的是如要使用DllImportAttribute屬性需要引入相應的名稱空間 即 using System.Runtime.InteropServices;
以上程式碼便可實現窗體的任何部分都能實現窗體的拖動效果。