学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

鼠标拖动窗体的疑问?

鼠标拖动窗体的疑问?

鼠标拖动窗体,我有几处 很不理解,
问 同事,他也半懂不懂,说知道那样用就可以,会用就可以。。。郁闷

不理解的地方 我 用红色注释掉了,请高手 帮我 详细解释一下,谢谢!

bool isFlag;
        Point offPoint;  //偏移坐标
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            isFlag = true;  //状态
            offPoint = new Point(-e.X, -e.Y);//这个很不理解,(e.X, e.Y)是鼠标点下时候的坐标,下面把他作为了 鼠标的移动偏移量,前面还加个负号, 也不理解        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (isFlag)
            {
                //移动窗体
                Point p = new Point(e.X, e.Y);//移动时鼠标的坐标

                //转换成相对屏幕的坐标,不知道这 有什么用?
                p = PointToScreen(p);
                p.Offset(offPoint);//这里 最不懂,这样 坐标移动怎么会是鼠标和窗体的 移动呢?                this.Location = p;

            }
        }


跪求高手详细指点,解释。。。

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            isFlag = false;
        }

TOP

自己顶!直到高手 来给我 解释。。。

TOP

我也在c#,书上也有这断代码,说是可以让鼠标拖动窗体,不过我也没看懂,
于是自己想了个代码,还是有点效果哦,嘿嘿

Point po;//记得是在外面定义的啊,用于存储上次鼠标的位置
private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            Point uo = po;//上次的鼠标位置给此时定义的uo;
            po = Control.MousePosition;//记下现在鼠标的位置以备下次用
            if (e.Button == MouseButtons.Left)//移动的同时要按下鼠标左键
            {//下面的就不用我说了吧
                this.Left = this.Left + (po .X - uo.X);
                this.Top = this.Top + (po .Y - uo.Y);
            }
        }

TOP

看来 楼上的和我有相同的疑问,希望高手 快来解释啊...

TOP

发新话题