如何使用InvalidateRect + Application.DoEvents而不会降低应用程序的速度?

时间:2019-01-02 00:40:32

标签: c#

我想在移动鼠标光标时在桌面上绘制矩形。在绘制新矩形之前,需要先删除旧矩形。  但是,InvalidateRect将在新矩形被淹没之后发生,因此所有矩形都消失了。因此,在绘制新矩形之前,我必须添加Application.DoEvents()来处理InvalidateRect。但这减慢了我的应用程序。有更好的方法吗?

void mouseHook_MouseMove(object sender, MouseEventArgs e)
    {
        label1.Text = (Cursor.Position.X + " : " + Cursor.Position.Y);

        if (start == true)
        {
            IntPtr desktopPtr = GetDC(IntPtr.Zero);
            System.Drawing.Graphics g = System.Drawing.Graphics.FromHdc(desktopPtr);

            Rectangle bb = new Rectangle(1, 1, 1, 1);

            bb = DrawRec(Cursor.Position.X, Cursor.Position.Y, desktopPtr, g);//getting new rectangle to draw on the desktop, rectangle topleft position is fixed
            Application.DoEvents();
            g.DrawRectangle(new Pen(Color.Red, 1), bb);

            ReleaseDC(this.Handle, desktopPtr);
            g.Dispose();
        }
    }

该代码有效,但运行缓慢。在谷歌搜索中,我发现我也许能够使用打印事件并使所有绘图任务逐一列出并处理,但是我不知道该怎么做。我需要示例代码。

0 个答案:

没有答案