无聊写个C#移动窗体的封装类

using System.Runtime.InteropServices;

namespace System.Windows.Forms
{
        class moveform
        {
#region 变量声明
                private bool isMouse = false; //记录是否按下
                private int mousedownleft = 0;
                private int mousedowntop = 0;
                public System.Windows.Forms.Form form1 = null;
#endregion

                ///

                /// 移动窗口类不使用api移动
                ///

                /// System.Windows.Forms.Form
                /// 在窗体的构造函数里 moveform mf=new moveform(this)
                public moveform( System.Windows.Forms.Form winform)
                {
                        form1 = winform;
                        if (form1==null)
                        {
                                MessageBox.Show(" public System.Windows.Forms.Form对象没有实例化");
                                return;
                        }
                        else
                        {
                                form1.MouseDown+=new MouseEventHandler(MouseDownEvent);
                                form1.MouseMove+=new MouseEventHandler(MouseMoveEvent);
                                form1.MouseUp+=new MouseEventHandler(MouseUpEvent);
                        }
                }
                #region win32 api 移动窗体
                [DllImport("user32.dll")]
                public static extern bool ReleaseCapture();
                [DllImport("user32.dll")]
  public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
                public const int WM_SYSCOMMAND = 0x0112;
                public const int SC_MOVE = 0xF010;
                public const int HTCAPTION = 0x0002;
                ///

                /// 使用api移动
                ///

                /// 
                /// 
//在窗体的构造函数里 moveform mf=new moveform(this,true)
                public moveform(System.Windows.Forms.Form form1s,bool win32api)
                {
                        form1 = form1s;
                        if (form1==null)
                        {
                                MessageBox.Show(" public System.Windows.Forms.Form对象没有实例化");
                                return;
                        }
                        else
                        {
                                form1.MouseDown += new MouseEventHandler(WinApiMoveEvent);
                        }
                }
                private void WinApiMoveEvent(object sender, System.Windows.Forms.MouseEventArgs e)
                {
                        ReleaseCapture();
                        SendMessage(form1.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
                }
                #endregion

                private void MouseDownEvent(object sender, System.Windows.Forms.MouseEventArgs  e)
                {
                        isMouse = true;
                        mousedownleft = GetMouseXY().X - form1.Left;
                        mousedowntop = GetMouseXY().Y - form1.Top;
                }
                private void MouseMoveEvent(object sender, System.Windows.Forms.MouseEventArgs e)
                {
                        if (isMouse==false)
                        {
                                return;
                        }
                        form1.Left = GetMouseXY().X - mousedownleft;
                        form1.Top = GetMouseXY().Y - mousedowntop;
                }
                private void MouseUpEvent(object sender, System.Windows.Forms.MouseEventArgs e)
                {
                        if (isMouse==true)  //如果还是真
                        {
                                isMouse = false;
                        }
                }
                ///

                /// 获取鼠标坐标
                ///

                /// 
                private System.Drawing.Point GetMouseXY()
                {
System.Drawing.Point xy = new System.Drawing.Point(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y);
                        return xy;
                }
        }
}

http://www.cm1212.com

演示代码下载 点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值