C#:直接在桌面上绘画时,避免桌面屏幕刷新

时间:2014-02-17 22:00:40

标签: c#

我正在编写一个应用程序,用户可以直接在桌面上绘制注释(圆形,线形,矩形等)。

我正在使用User32.dll中的GetDC并在桌面上成功绘制一个矩形:

namespace Annotation
{
   public partial class BaseForm : Form
   {
    [DllImport("User32.dll")]
    static extern IntPtr GetDC(IntPtr hwnd);

    [DllImport("User32.dll")]
    static extern void ReleaseDC(IntPtr dc);

    public BaseForm()
    {
        InitializeComponent();
        BackColor = Color.Lime;
        TransparencyKey = Color.Lime; 
    }

    private void button1_Click(object sender, EventArgs e)
    {
        IntPtr desktop = GetDC(IntPtr.Zero);
        using (Graphics g = Graphics.FromHdc(desktop))
        {
            g.FillRectangle(Brushes.Red, 0, 0, 100, 100);
        }
    }
  }
}

单击按钮时,桌面上将绘制一个矩形。但当我将鼠标移过矩形时,桌面将被重绘,我的矩形将消失。

有没有办法可以让矩形永远呆在那里(直到我清除图纸)?

感谢。

1 个答案:

答案 0 :(得分:4)

  

有没有办法可以让矩形永远呆在那里(直到我清除图纸)?

如果您坚持直接在桌面上绘图,那就不行了。桌面窗口归系统所有。当系统决定需要重新绘制时,例如因为另一个窗口通过桌面,它将重新绘制桌面。由于系统不知道您希望显示什么,因此无法重新绘制注释。

如果要在桌面上显示持久状态,则必须创建一个窗口以在其中绘制该状态。创建一个透明的点击窗口,并在该窗口中绘制您将要绘制的内容。