• 欢迎访问交通人网站!
  • 分享一款小游戏:信任的进化
  •    发表于9年前 (2016-04-16)  热点资讯 |   抢沙发  635 
    文章评分 2 次,平均分 5.0

    无标题栏窗口,就是FormBorderStyle设置为None的窗口。相对于有标题窗口,无标题窗口有时更美观,比如360浏览器的这个关于窗口。不过呢,在默认情况下,用户是无法用鼠标移动无标题窗口的,这显然会降低用户体验。C#:无标题栏窗口的拖动

    那怎么实现无标题窗口的拖动呢?小编这里整理了两种方法,一种是调用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/

    交通人博客是交通人工作室(JTR Studio)建立的交通人系列网站之一,是交通人工作室的主阵地,旨在整合和分享交通行业相关资讯,具体包括但不限于行业新闻、行业动态,以及行业相关规范、书籍、报告和软件等资源。

    发表评论

    表情 格式

    暂无评论

    
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享