要实现C#无标题栏窗体的拖动功能,可以通过以下步骤实现:
-
在窗体的构造函数中添加以下代码,以去掉标题栏:
this.FormBorderStyle = FormBorderStyle.None;
-
然后,添加以下代码以处理鼠标按下事件:
private const int WM_NCHITTEST = 0x0084;
private const int HT_CAPTION = 0x0002;protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_NCHITTEST:
base.WndProc(ref m);
if ((int)m.Result == HT_CLIENT)
m.Result = (IntPtr)HT_CAPTION;
return;
}
base.WndProc(ref m);
} -
最后,通过处理鼠标按下和移动事件来实现拖动功能:
private bool isDragging = false;
private Point lastCursor;
private Point lastForm;private void Form1_MouseDown(object sender, MouseEventArgs e)
{
isDragging = true;
lastCursor = Cursor.Position;
lastForm = this.Location;
}private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
int x = lastForm.X - (lastCursor.X - Cursor.Position.X);
int y = lastForm.Y - (lastCursor.Y - Cursor.Position.Y);
this.Location = new Point(x, y);
}
}private void Form1_MouseUp(object sender, MouseEventArgs e)
{
isDragging = false;
}
将上述代码添加到你的窗体上即可实现无标题栏窗体的拖动功能。