我要实现的效果是在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+十字光标重绘鼠标位置
{
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+十字光标重绘鼠标位置
那个SizeMode属性默认的就是Normal啊,我也没修改它。在MouseMove事件里用e.X e.Y获取的是鼠标在pictureBox里的位置啊。
这样啊、那我就不太清楚了,要不你按照PointToClient(MousePosition)取的坐标调整下
我现在不用PointToClient(MousePosition)了,用另一种思路了。