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);
        }
    }

  • 相关阅读:
    iOS的图片:解码(CPU)与内存(缓存)
    iOS离屏渲染的解释:渲染与cpu、gpu
    渲染、render与绘制
    算法沉思:算法的构成
    待阅备份
    iOS进阶之页面性能优化
    iOS--性能优化--保持界面流畅
    iOS开发中的Markdown渲染
    OS开发小记:iOS富文本框架DTCoreText在UITableView上的使用
    iOS UI的几种模式
  • 原文地址:https://www.cnblogs.com/ChangTan/p/2097481.html
Copyright © 2011-2022 走看看