线条画即时响应鼠标移动?

时间:2012-03-16 14:32:13

标签: c# wpf

我试图弄清楚如何编写代码,以便鼠标移动和线条绘制之间的响应时间是即时的。每次我这样做时,总是在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;

    }

1 个答案:

答案 0 :(得分:2)

WinAPI不会足够快地发送WM_MOUSEMOVE以检测鼠标的每个移动。有一篇非常好的文章展示了如何非常精确地检测鼠标移动(http://blogs.msdn.com/b/oldnewthing/archive/2012/03/14/10282406.aspx