C#中利用"消息处理"实现在窗体中按下鼠标左键拖动窗体_L

在Windows SDK编程中,这种功能很容易实现:只要在收到WM_NCHITTEST消息的时候总是返回HTCAPTION就可以了
对于.NET,我觉得最好的办法就是编写一个MyForm类型,从Form继承,并且override WndProc方法,在收到WM_NCHITTEST消息时返回HTCAPTION(具体的数值可以在Windows.h中找到)
这样做不过是“欺骗”Windows,使其认为整个窗口都是“标题栏”
把下面这段代码加到VS.NET生成的从Form继承的类当中即可实现
private int WM_NCHITTEST = 0x0084;
private int HTCAPTION = 2;
protected override void WndProc(ref System.Windows.Forms.Message msg)
{
    if (msg.Msg == WM_NCHITTEST)
          msg.Result = (System.IntPtr)HTCAPTION;
    else base.WndProc(ref msg);
}
Windows在特定的时候会询问应用程序当前的鼠标在窗口的什么位置,通过发送WM_NCHITTEST消息,应用可以通知Windows,当前鼠标停留在标题兰(HTCAPTION),而Windows在鼠标在标题栏拖动的时候会拖动整个窗口


.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现C#窗体的任意位置拖动效果,可以通过以下步骤进行: 1. 在窗体上添加一个Panel控件,并将其Dock属性设置为Top。这个Panel控件将作为窗体的标题栏。 2. 在Panel控件上添加一个Label或者其他控件,用来显示窗体的标题。 3. 在Panel控件的MouseDown事件,获取鼠标当前的位置,并将窗体的Location属性设置为这个位置。同时设置一个变量记录鼠标按下时的位置。 4. 在Panel控件的MouseMove事件,如果鼠标左键被按下,计算鼠标当前位置和按下时位置的偏移量,然后将窗体的Location属性加上这个偏移量。 下面是示例代码: ``` public partial class Form1 : Form { private Point mouseOffset; public Form1() { InitializeComponent(); } private void panelTitle_MouseDown(object sender, MouseEventArgs e) { mouseOffset = new Point(-e.X, -e.Y); this.Cursor = Cursors.SizeAll; } private void panelTitle_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point mousePos = Control.MousePosition; mousePos.Offset(mouseOffset.X, mouseOffset.Y); this.Location = mousePos; } } private void panelTitle_MouseUp(object sender, MouseEventArgs e) { this.Cursor = Cursors.Default; } } ``` 在上述代码,panelTitle是我们添加的Panel控件,用来作为窗体的标题栏。在MouseDown事件,我们记录鼠标按下时的位置,并将鼠标的光标设置为SizeAll,以便用户知道窗体可以被拖动。在MouseMove事件,如果鼠标左键被按下,我们计算鼠标当前位置和按下时位置的偏移量,并将窗体的Location属性设置为鼠标当前位置加上偏移量。在MouseUp事件,我们将光标设置回默认状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值