移动窗体上的控件,鼠标跟随,动态改变

          

       public struct POINTAPI
        {
            public uint x;
            public uint y;
        }

        private enum EnumMousePointPosition
        {
            MouseSizeNone = 0,        //'无
            MouseSizeRight = 1,       //'拉伸右边框
            MouseSizeLeft = 2,        //'拉伸左边框
            MouseSizeBottom = 3,      //'拉伸下边框
            MouseSizeTop = 4,         //'拉伸上边框
            MouseSizeTopLeft = 5,     //'拉伸左上角
            MouseSizeTopRight = 6,    //'拉伸右上角
            MouseSizeBottomLeft = 7,  //'拉伸左下角
            MouseSizeBottomRight = 8, //'拉伸右下角
            MouseDrag = 9 // '鼠标拖动
        }

       private void Ctrl_MousecDown(object sender, MouseEventArgs e)
        {
            p.X = e.X;
            p.Y = e.Y;

         }

       private void Ctrl_MouseLeave(object sender, System.EventArgs e)
        {
            m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;
            this.Cursor = Cursors.Arrow;
        }

        private void Ctrl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (iState == CMove || iState == CSelect)
            {
                Control lCtrl = (sender as Control);

                if (e.Button == MouseButtons.Left)
                {
                    switch (m_MousePointPosition)
                    {
                        case EnumMousePointPosition.MouseDrag:
                            lCtrl.Left = lCtrl.Left + e.X - p.X;
                            lCtrl.Top = lCtrl.Top + e.Y - p.Y;
                            break;
                        case EnumMousePointPosition.MouseSizeBottom:
                            lCtrl.Height = lCtrl.Height + e.Y - p1.Y;
                            p1.X = e.X;
                            p1.Y = e.Y; //'记录光标拖动的当前点
                            break;
                        case EnumMousePointPosition.MouseSizeBottomRight:
                            lCtrl.Width = lCtrl.Width + e.X - p1.X;
                            lCtrl.Height = lCtrl.Height + e.Y - p1.Y;
                            p1.X = e.X;
                            p1.Y = e.Y; //'记录光标拖动的当前点
                            break;
                        case EnumMousePointPosition.MouseSizeRight:
                            lCtrl.Width = lCtrl.Width + e.X - p1.X;
                            //      lCtrl.Height = lCtrl.Height + e.Y - p1.Y;
                            p1.X = e.X;
                            p1.Y = e.Y; //'记录光标拖动的当前点
                            break;
                        case EnumMousePointPosition.MouseSizeTop:
                            lCtrl.Top = lCtrl.Top + (e.Y - p.Y);
                            lCtrl.Height = lCtrl.Height - (e.Y - p.Y);
                            break;
                        case EnumMousePointPosition.MouseSizeLeft:
                            lCtrl.Left = lCtrl.Left + e.X - p.X;
                            lCtrl.Width = lCtrl.Width - (e.X - p.X);
                            break;
                        case EnumMousePointPosition.MouseSizeBottomLeft:
                            lCtrl.Left = lCtrl.Left + e.X - p.X;
                            lCtrl.Width = lCtrl.Width - (e.X - p.X);
                            lCtrl.Height = lCtrl.Height + e.Y - p1.Y;
                            p1.X = e.X;
                            p1.Y = e.Y; //'记录光标拖动的当前点
                            break;
                        case EnumMousePointPosition.MouseSizeTopRight:
                            lCtrl.Top = lCtrl.Top + (e.Y - p.Y);
                            lCtrl.Width = lCtrl.Width + (e.X - p1.X);
                            lCtrl.Height = lCtrl.Height - (e.Y - p.Y);
                            p1.X = e.X;
                            p1.Y = e.Y; //'记录光标拖动的当前点
                            break;
                        case EnumMousePointPosition.MouseSizeTopLeft:
                            lCtrl.Left = lCtrl.Left + e.X - p.X;
                            lCtrl.Top = lCtrl.Top + (e.Y - p.Y);
                            lCtrl.Width = lCtrl.Width - (e.X - p.X);
                            lCtrl.Height = lCtrl.Height - (e.Y - p.Y);
                            break;
                        default:
                            break;
                    }
                    if (lCtrl.Width < MinWidth) lCtrl.Width = MinWidth;
                    if (lCtrl.Height < MinHeight) lCtrl.Height = MinHeight;

                }
                else
                {
                    m_MousePointPosition = MousePointPosition(lCtrl.Size, e); //'判断光标的位置状态
                    switch (m_MousePointPosition) //'改变光标
                    {
                        case EnumMousePointPosition.MouseSizeNone:
                            this.Cursor = Cursors.Arrow;       //'箭头
                            break;
                        case EnumMousePointPosition.MouseDrag:
                            this.Cursor = Cursors.SizeAll;     //'四方向
                            break;
                        case EnumMousePointPosition.MouseSizeBottom:
                            this.Cursor = Cursors.SizeNS;      //'南北
                            break;
                        case EnumMousePointPosition.MouseSizeTop:
                            this.Cursor = Cursors.SizeNS;      //'南北
                            break;
                        case EnumMousePointPosition.MouseSizeLeft:
                            this.Cursor = Cursors.SizeWE;      //'东西
                            break;
                        case EnumMousePointPosition.MouseSizeRight:
                            this.Cursor = Cursors.SizeWE;      //'东西
                            break;
                        case EnumMousePointPosition.MouseSizeBottomLeft:
                            this.Cursor = Cursors.SizeNESW;    //'东北到南西
                            break;
                        case EnumMousePointPosition.MouseSizeBottomRight:
                            this.Cursor = Cursors.SizeNWSE;    //'东南到西北
                            break;
                        case EnumMousePointPosition.MouseSizeTopLeft:
                            this.Cursor = Cursors.SizeNWSE;    //'东南到西北
                            break;
                        case EnumMousePointPosition.MouseSizeTopRight:
                            this.Cursor = Cursors.SizeNESW;    //'东北到南西
                            break;
                        default:
                            break;
                    }
                }
            }
        }

        private EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e)
        {
            if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height))
            {
                if (e.X < Band)
                {
                    if (e.Y < Band) { return EnumMousePointPosition.MouseSizeTopLeft; }
                    else
                    {
                        if (e.Y > -1 * Band + size.Height)
                        { return EnumMousePointPosition.MouseSizeBottomLeft; }
                        else
                        { return EnumMousePointPosition.MouseSizeLeft; }
                    }
                }
                else
                {
                    if (e.X > -1 * Band + size.Width)
                    {
                        if (e.Y < Band)
                        { return EnumMousePointPosition.MouseSizeTopRight; }
                        else
                        {
                            if (e.Y > -1 * Band + size.Height)
                            { return EnumMousePointPosition.MouseSizeBottomRight; }
                            else
                            { return EnumMousePointPosition.MouseSizeRight; }
                        }
                    }
                    else
                    {
                        if (e.Y < Band)
                        { return EnumMousePointPosition.MouseSizeTop; }
                        else
                        {
                            if (e.Y > -1 * Band + size.Height)
                            { return EnumMousePointPosition.MouseSizeBottom; }
                            else
                            { return EnumMousePointPosition.MouseDrag; }
                        }
                    }
                }
            }
            else
            { return EnumMousePointPosition.MouseSizeNone; }
        }

 

转载于:https://www.cnblogs.com/yliu/archive/2009/05/12/1455042.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值