您的位置:首页 > 编程语言 > C#

C#中实现窗口拖动

2011-02-20 14:42 363 查看
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);
    }
}


实验证明这个方法是比较好的,它模拟了点击窗口标题栏进行拖动的动作,而且即使没有标题栏的窗口也可以用,这段代码转自:http://zhidao.baidu.com/question/195773173.html



我以前用过的方法是设置窗体的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;
        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: