让WinForms窗口随鼠标左键移动

本文介绍了在WinForms中实现窗口拖动的两种方法:一是通过编程方式改变窗口位置;二是利用Windows API实现。适用于无窗口栏的窗口设计。

在窗口程序的开发中,我们经常会需要当用户鼠标点击窗口的任何地方时,能够让窗口随鼠标一起移动。特别是当你的WinForms窗口没有窗口栏(Form.FormBorderStyle = None),用户无法通过点击窗口栏移动窗口时,这种实现就很必要了。
应该有很多方法可以实现,我自己发现了两种方法:一种方法就是自己编程实现窗口的位置随鼠标改变;另一种就是直接利用Windows的API。

废话不多说了,看代码,so easy :)

设计一个窗体时,把以下代码加入到窗口中,就可以实现这个功能:

private bool IsMouseDownInForm = false;
private Point p;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    IsMouseDownInForm = true;
    p = e.Location;
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
    IsMouseDownInForm = false;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (IsMouseDownInForm)
    {
        Left += e.Location.X - p.X;
        Top += e.Location.Y - p.Y;
    }
}

第二种方法是利用Windows的API,熟悉Windows API编程的人应该很容易就理解了。
using System.Runtime.InteropServices;

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();
protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);
    if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    }
}

呵呵,很简单的哦,trickj_0043.gif

转载于:https://www.cnblogs.com/hustwing/archive/2009/10/18/1585585.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值