我想在移动鼠标光标时在桌面上绘制矩形。在绘制新矩形之前,需要先删除旧矩形。 但是,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();
}
}
该代码有效,但运行缓慢。在谷歌搜索中,我发现我也许能够使用打印事件并使所有绘图任务逐一列出并处理,但是我不知道该怎么做。我需要示例代码。