• <转载>让WinForms窗口随鼠标左键移动


    在窗口程序的开发中,我们经常会需要当用户鼠标点击窗口的任何地方时,能够让窗口随鼠标一起移动。特别是当你的WinForms窗口没有窗口栏(Form.FormBorderStyle
    =
    None),用户无法通过点击窗口栏移动窗口时,这种实现就很必要了。
    应该有很多方法可以实现,我自己发现了两种方法:一种方法就是自己编程实现窗口的位置随鼠标改变;另一种就是直接利用Windows的API。


    废话不多说了,看代码,so easy :)


    设计一个窗体时,把以下代码加入到窗口中,就可以实现这个功能:
            private bool IsMouseDownInForm =
    false;
            private Point p;


            private void Form1_MouseDown(object sender, MouseEventArgs
    e)
            {
                IsMouseDownInForm = true;
                p =
    e.Location;
            }


            private void Form1_MouseUp(object sender, MouseEventArgs
    e)
            {
                IsMouseDownInForm = false;
            }


            private void Form1_MouseMove(object sender, MouseEventArgs
    e)
            {
                if (IsMouseDownInForm)
               
    {
                    Left += e.Location.X - p.X;
                    Top +=
    e.Location.Y - p.Y;
                }
            }
    当然,也可以设计一个窗口基类,override
    Form的OnMouseMove、OnMouseUp、OnMouseDown方法,实现这个小功能。


    第二种方法是利用Windows的API,熟悉Windows
    API编程的人应该很容易就理解了。
    首先,利用平台调用,引入User32.dll中以下两个函数的调用:


    using System.Runtime.InteropServices;


    public const int WM_NCLBUTTONDOWN = 0xa1;
    public const int HT_CAPTION =
    0x2;


    [DllImportAttribute("user32.dll")]
    public static extern int
    SendMessage(IntPtr hWnd, int Msg, int wParam, int
    lParam);
    [DllImportAttribute("user32.dll")]
    public static extern bool
    ReleaseCapture();


    然后,你只需要在窗口的MouseDown事件处理中加入以下代码就可以了:
    private void Form1_MouseDown(object
    sender, System.Windows.Forms.MouseEventArgs e)
    {    
        if (e.Button ==
    MouseButtons.Left)
        {
            ReleaseCapture();
           
    SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
        }
    }

  • 相关阅读:
    MapReduce 中的Map后,sort不能对中文的key排序
    wordCount程序中MapReduce工作过程分析
    使用eclipse的快捷键自动生成的map或者reduce函数的参数中:“org.apache.hadoop.mapreduce.Reducer.Context context”
    "hadoop namenode -format"命令的作用和影响的文件
    伪分布模式下使用java接口,访问hdfs
    MySQL Server 5.5.44免安装版配置详解
    quartz Cron表达式一分钟教程
    【转载】jQuery弹出层始终垂直居中于当前屏幕
    LeetCode 151 翻转字符串里的单词
    LeetCode 43 字符串相乘
  • 原文地址:https://www.cnblogs.com/ChangTan/p/2097481.html
Copyright © 2020-2023  润新知