【发布时间】:2013-09-01 13:16:46
【问题描述】:
我正试图弄清楚如何清除我在桌面上创建的绘图。听说最好的方法是使用this.Invalidate()。
问题是当我将它添加到代码中时,Visual Studio 无法识别该方法。我正在使用 VS Express for Desktop 2012 和 .NET 4.5。
有什么想法吗?
错误信息:
'WpfApplication1.MainWindow' 不包含对 'Invalidate' 并且没有扩展方法 'Invalidate' 接受第一个 可以找到“WpfApplication1.MainWindow”类型的参数(你是 缺少 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*/);
有什么想法吗?
【问题讨论】:
-
您需要使用原生 API 调用使 桌面窗口 无效。
-
你使用的是
WPF,而不是Winforms。
标签: c#