winform移动无边框窗体

在开发Winform窗体程序的时候,有时希望去掉窗体的边框,然后进行一系列自定义的操作。但是往往在去掉边框之后会遇到一个问题:如何使用鼠标拖动该窗体?

  在此推荐一种我经常使用的方法:

[DllImport("user32.dll", EntryPoint = "SendMessageA")]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll")]
private static extern int ReleaseCapture();

private const int WM_NCLBUTTONDOWN = 0XA1;   //定义鼠标左键按下
private const int HTCAPTION = 2;

// 重写为了移动无边框窗体
protected override void OnMouseDown(MouseEventArgs e)
{
	base.OnMouseDown(e);
	MoveForm();
}

private void MoveForm()
{
	ReleaseCapture();
	SendMessage((int)this.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}

  在上述代码中,SendMessage与ReleaseCapture是两个Win32的API,WM_NCLBUTTONDOWN与HTCAPTION是两个常量,前者代表的是在窗体非客户区鼠标左键按下,后者代表的是鼠标当前左边在窗体标题栏上。(想了解更多关于win32常量的含义及数值请加QQ群:207043655)

  实现的原理是在非客户区鼠标左键按下,就向系统发送一个鼠标当前在标题栏的假消息,于是系统便按标题栏的特性进行处理,也就可以移动窗体了。


  举一反三:如果我在窗体上放了一个Label控件(或者其他控件),鼠标在该控件范围内还能移动窗体吗?如果不能,那么要怎么做才能移动呢?

  如果你对上面的问题有自己的想法,欢迎加QQ群:207043655,与我们一起交流讨论,一起学习,一起成长。


  本文转载自http://www.motyer.cn/Files/BlogDetails/how-to-move-borderless-form.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值