文章评分		 次,平均分		 :
		
		
		
		
		
	
		
		
				
		
					
				
		
        		[收起]
                文章目录
                
            
无标题栏窗口,就是FormBorderStyle设置为None的窗口。相对于有标题窗口,无标题窗口有时更美观,比如360浏览器的这个关于窗口。不过呢,在默认情况下,用户是无法用鼠标移动无标题窗口的,这显然会降低用户体验。
那怎么实现无标题窗口的拖动呢?小编这里整理了两种方法,一种是调用Windows API,一种是根据鼠标位置重设窗口位置。对于方法二,根据鼠标和窗口位置采集方法的不同,还有其他不同的实现方法。
方法一:Windows API
1.首先导入命名空间
using System.Runtime.InteropServices;
2.然后如下代码:
[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);//拖动窗体
}
}
方法二:根据鼠标位置设置窗口位置
// 窗体的屏幕坐标  
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/
				


						
						
						
						
暂无评论