【发布时间】:2014-02-18 06:02:39
【问题描述】:
我正在编写一个应用程序,用户可以直接在桌面上绘制注释(圆、线、矩形等)。
我正在使用来自 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);
}
}
}
}
当我单击按钮时,桌面上将绘制一个矩形。但是当我将鼠标移到矩形上时,桌面会被重绘,我的矩形会消失。
有没有办法可以让矩形永远留在那里(直到我清除绘图)?
谢谢。
【问题讨论】:
-
是的,改为创建一个窗口。
-
我手头没有示例,但您可以创建一个覆盖整个桌面的透明窗口并在其上绘图。
-
FWIW,你当前的程序没有调用
ReleaseDC。这是一个很大的泄漏。
标签: c#