日期:2014-05-17  浏览次数:21203 次

在PictureBox_MouseMove里获取到的鼠标位置不准确
我要实现的效果是在picTureBox的mouseMove事件绘制十字光标,因为试了各种办法都有延迟感,所以现在另一种思路,就是在mouseMove时Inivalidate,然后画光标,用到的是e.X,e.Y,但是我在别处又要通过PointToClient(MousePosition)获取鼠标位置,和mouseMove时的位置相比较,却发现Inivalidate后通过这两种方式获取的点是不一样的,求大神帮忙解决!!!

  private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {            
            this.pictureBox1.Invalidate();      
            Graphics g = pictureBox1.CreateGraphics();

            Rectangle rec = new Rectangle(5, 5, 200, 25);
            g.DrawRectangle(new Pen(Color.Red), rec);

            Pen pen = new Pen(Brushes.White);
            g.DrawLine(pen, 0, e.Y, this.Width, e.Y);
            g.DrawLine(pen, e.X, 0, e.X, this.Height);

            this.pictureBox1.Update();//立即更新
            Application.DoEvents();
         
            Point p = myPanel1.PointToClient(MousePosition);//这时这个点和e.X,e.Y不一样            
            Console.WriteLine("Mousemove客户区位置 X=" + p.X + " Y=" + p.Y);
            Console.WriteLine("Mousemove赋值前e.X=" + e.X + "  lastX=" + lastX + "  e.Y=" + e.Y + "  lastY=" + lastY + "  remain=" + remained.ToString());
        }
c# GDI+ 十字光标 重绘 鼠标位置

------解决方案--------------------
你要先保证PbBox里面的图片没有缩放过,把PirtureBox的SizeMode属性设置为Normal再取坐标试试看