• 移动鼠标时按钮跟着移动


    class MoveAccessPoint
        {
            bool IsMoving = false;
            Point pCtrlLastCoordinate = new Point(0, 0);
            Point pCursorOffset = new Point(0, 0);
            Point pCursorLastCoordinate = new Point(0, 0);
            private Control ctrl = null;
            private ScrollableControl Containe = null;
    
            #region 私有方法
            /// <summary>
            /// 在鼠标左键按下的状态记录鼠标当前的位置,以及被移动组件的当前位置
            /// </summary>
            private void DeviceMouseDown(object sender, MouseEventArgs e)
            {
                Button currentButton = (Button)sender;
                if (Containe == null)
                {
                    return;
                }
                if (e.Button == MouseButtons.Left)
                {
    
                    IsMoving = true;
                    pCtrlLastCoordinate.X = currentButton.Left;
                    pCtrlLastCoordinate.Y = currentButton.Top;
                    pCursorLastCoordinate.X = Cursor.Position.X;
                    pCursorLastCoordinate.Y = Cursor.Position.Y;
                     
                }
            }
            private void DeviceMouseMove(object sender, MouseEventArgs e)
            {
                Button currentButton = (Button)sender;
                if (Containe == null)
                {
                    return;
                }
    
                if (e.Button == MouseButtons.Left)
                {
                    if (this.IsMoving)
                    {
    
    
                        Point pCursor = new Point(Cursor.Position.X, Cursor.Position.Y);
                        //Point pCursor = Containe.PointToClient(Cursor.Position);
    
                        pCursorOffset.X = pCursor.X - pCursorLastCoordinate.X;
                        pCursorOffset.Y = pCursor.Y - pCursorLastCoordinate.Y;
    
    
    
                        currentButton.Left = pCtrlLastCoordinate.X + pCursorOffset.X;
                        currentButton.Top = pCtrlLastCoordinate.Y + pCursorOffset.Y;
    
    
                        //修正参数
    
                        if (currentButton.Left < 0)
                            currentButton.Left = 0;
                        if (currentButton.Top < 0)
                            currentButton.Top = 0;
                        if (currentButton.Left + currentButton.Width > this.Containe.HorizontalScroll.Maximum)
                            currentButton.Left = this.Containe.HorizontalScroll.Maximum - currentButton.Width;
                        if (currentButton.Top + currentButton.Height > this.Containe.VerticalScroll.Maximum)
                            currentButton.Top = this.Containe.VerticalScroll.Maximum - currentButton.Height;
                        
                    }
                }
            }
    
            private void DeviceMouseUp(object sender, MouseEventArgs e)
            {
                Button currentButton = (Button)sender;
                if (Containe == null)
                {
                    return;
                }
                if (this.IsMoving)
                {
                    pCursorOffset.X = 0;
                    pCursorOffset.Y = 0;
                    IsMoving = false;
                }
            }
            #endregion
            public void EditMode(Control c, ScrollableControl parentContain)
            {
                ctrl = c;
                this.Containe = parentContain;
    
                ctrl.MouseDown += new MouseEventHandler(DeviceMouseDown);
                ctrl.MouseMove += new MouseEventHandler(DeviceMouseMove);
                ctrl.MouseUp += new MouseEventHandler(DeviceMouseUp);
            }
            public void SaveMode(Control c, ScrollableControl parentContain)
            {
                ctrl = c;
                this.Containe = parentContain;
                ctrl.MouseDown -= new MouseEventHandler(DeviceMouseDown);
                ctrl.MouseMove -= new MouseEventHandler(DeviceMouseMove);
                ctrl.MouseUp -= new MouseEventHandler(DeviceMouseUp);
            }
            
            public void simulateDeviceMouseDown(Point lpPoint)
            {
                Win32.simulateDeviceMouseDown( lpPoint);
            }
        }
  • 相关阅读:
    linux command lynx
    git bisect
    git blame (10)
    git crate&query&delete tag(九)
    git crate patch and check&apply patch(八)
    learning shell check host dependent pkg (8)
    【泛型】
    sql server 查询所有表的记录数
    【转】EXCEL中如何实现由总表自动得出分表
    MS Chart 打印
  • 原文地址:https://www.cnblogs.com/zhumeng1582/p/3425815.html
Copyright © 2020-2023  润新知