zoukankan      html  css  js  c++  java
  • <转载>让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);
        }
    }

  • 相关阅读:
    uva 10066 The Twin Towers (最长公共子)
    warning: directory not found for option &#39; &#39;
    Hadoop-2.4.0安装和wordcount执行验证
    Android中的动画具体解释系列【1】——逐帧动画
    python学习1(小白记录)
    Struts2 开发环境搭建
    SlidingMenu开源项目滑动界面的实现总结
    ubuntu终端方向键不能用(主机名不显示)问题的解决
    Gnu Linux--Ubuntu系统清理项整理
    Task Schedule
  • 原文地址:https://www.cnblogs.com/ChangTan/p/2097481.html
Copyright © 2011-2022 走看看