-2

我试图弄清楚如何清除我在桌面上创建的绘图。听说最好的方法是使用this.Invalidate()。

问题是当我将它添加到代码中时,Visual Studio 无法识别该方法。我正在使用 VS Express for Desktop 2012 和 .NET 4.5。

有任何想法吗?

错误信息:

“WpfApplication1.MainWindow”不包含“Invalidate”的定义,并且找不到接受“WpfApplication1.MainWindow”类型的第一个参数的扩展方法“Invalidate”(您是否缺少 using 指令或程序集引用?)

下面是代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {

        InitializeComponent();

        System.Windows.Forms.Timer _timer = new Timer() { Interval = 1, Enabled = true };
        _timer.Tick += new EventHandler(Timer_Tick);

    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
        {
            System.Drawing.Point pt = System.Windows.Forms.Cursor.Position;

            g.DrawEllipse(Pens.Black, pt.X - 10, pt.Y - 10, 20, 20);                
        }

        this.Invalidate(); 
    }
}

编辑:

每个人都感谢您的提醒。

我试过使用 RedrawWindow() 但每次我开始测试时程序都会崩溃。有任何想法吗?我正在尝试用这个矩形 rc 更新桌面。

例如

RECT rc = new RECT( pt.X - 20, pt.Y - 20, pt.X + 20, pt.Y + 20 );

RedrawWindow(IntPtr.Zero, rc, IntPtr.Zero, 0x0400/*RDW_FRAME*/ | 0x0100/*RDW_UPDATENOW*/| 0x0001/*RDW_INVALIDATE*/);

有任何想法吗?

4

3 回答 3

1

由于您在桌面上绘图,因此使主窗口无效并无济于事。您需要使Desktop.

为此,请使用RedrawWindow函数。

这是RedrawWindow的 P/Invoke 声明

于 2013-09-01T13:28:42.433 回答
1

它不是 WPF 中的 InvalidateVisual() 吗?

请参阅http://msdn.microsoft.com/en-us/library/system.windows.uielement.invalidatevisual.aspx

于 2013-09-01T13:20:29.317 回答
1

Invalidate()方法是一种Windows 窗体方法,但您使用的是 WPF。在 WPF 中,使用InvalidateVisual()Windows 窗体的 WPF 等效项Invalidate()

于 2013-09-01T13:20:58.583 回答