const int WM_NCLBUTTONDOWN = 0xA1;
const int HT_CAPTION = 0x2;
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private void Form2_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left & this.WindowState == FormWindowState.Normal)
{
// 移动窗体
this.Capture = false;
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
const int WM_NCLBUTTONDOWN = 0xA1;
const int HT_CAPTION = 0x2;
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private void Form2_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left & this.WindowState == FormWindowState.Normal)
{
// 移动窗体
this.Capture = false;
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
实验证明这个方法是比较好的,它模拟了点击窗口标题栏进行拖动的动作
我以前用过的方法是设置窗体的Location的方法,很卡,而且快速拖动会不同步
Point m_oldpoint; bool m_mouse_is_down = false; private void pictureBox_title_MouseDown(object sender, MouseEventArgs e) { m_oldpoint = MousePosition; } private void pictureBox_title_MouseMove(object sender, MouseEventArgs e) { if ((e.Button != MouseButtons.Left) || (MousePosition == m_oldpoint)) { return; } this.Location = new Point(this.Location.X + MousePosition.X - m_oldpoint.X, this.Location.Y + MousePosition.Y - m_oldpoint.Y); m_oldpoint = MousePosition; }