我试图弄清楚如何编写代码,以便鼠标移动和线条绘制之间的响应时间是即时的。每次我这样做时,总是在2之间存在滞后。我已经在windows窗体中对此进行了编码,现在我在WPF中对其进行编码。
问题肯定在于代码,而不是我的电脑。
Basicaly它的工作原理如下。 单击任意位置并创建point1。 移动鼠标并更新point2,并从Point1到Point2绘制一条线,该线在鼠标移动时会发生变化。
下面是我执行此操作的极其简单的代码。 它可能看起来很快,但如果你最大化窗口并使线条变长并快速移动鼠标,你可以更容易地注意到它......
此外,未来将会有一个图像层,这肯定会导致它更加滞后..但是现在我只想优化它。
当我使用5年多以前的其他此类程序时,线条运动实际上是即时的。这就是为什么我很困惑为什么这个新的编码,它的滞后..
Point mLoc;
Line myLine = new Line();
public MainWindow()
{
InitializeComponent();
SnapsToDevicePixels = false;
myLine.Stroke = System.Windows.Media.Brushes.White;
myLine.StrokeThickness = 1;
canvas1.Children.Add(myLine);
}
private void onMMove(object sender, MouseEventArgs e)
{
mLoc = Mouse.GetPosition(canvas1);
myLine.X2 = mLoc.X;
myLine.Y2 = mLoc.Y;
}
private void onMLClick(object sender, MouseButtonEventArgs e)
{
mLoc = Mouse.GetPosition(canvas1);
myLine.X1 = mLoc.X;
myLine.Y1 = mLoc.Y;
}
答案 0 :(得分:2)
WinAPI不会足够快地发送WM_MOUSEMOVE以检测鼠标的每个移动。有一篇非常好的文章展示了如何非常精确地检测鼠标移动(http://blogs.msdn.com/b/oldnewthing/archive/2012/03/14/10282406.aspx)