文章评分
次,平均分 :
[收起]
文章目录
无标题栏窗口,就是FormBorderStyle设置为None的窗口。相对于有标题窗口,无标题窗口有时更美观,比如360浏览器的这个关于窗口。不过呢,在默认情况下,用户是无法用鼠标移动无标题窗口的,这显然会降低用户体验。
那怎么实现无标题窗口的拖动呢?小编这里整理了两种方法,一种是调用Windows API,一种是根据鼠标位置重设窗口位置。对于方法二,根据鼠标和窗口位置采集方法的不同,还有其他不同的实现方法。
方法一:Windows API
1.首先导入命名空间
1 |
using System.Runtime.InteropServices; |
2.然后如下代码:
1 2 3 4 5 6 7 8 9 10 11 |
[DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr hWnd,int msg,int wparam,int lparam); protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if (e.Button == MouseButtons.Left)//按下的是鼠标左键 { Capture = false;//释放鼠标使能够手动操作 SendMessage(Handle, 0x00A1, 2, 0);//拖动窗体 } } |
方法二:根据鼠标位置设置窗口位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 窗体的屏幕坐标 Point formPoint; // 鼠标光标的屏幕坐标 Point mousePoint; //鼠标在窗体按下时... private void Form1_MouseDown(object sender, MouseEventArgs e) { // 获取窗体的屏幕坐标(x,y) formPoint = this.Location; // 获取鼠标光标的位置(屏幕坐标) mousePoint = Control.MousePosition; } //鼠标在窗体移动时... private void Form1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //获取鼠标移动时的屏幕坐标 Point mousePos = Control.MousePosition; //改变窗体位置 this.Location = new Point(formPoint.X+mousePos.X - mousePoint.X, formPoint.Y+mousePos.Y - mousePoint.Y); } } |
参考:脚本之家+CSDN博客·friendan的专栏
除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/csharp-how-to-move-form-with-border-move/
暂无评论