我正在编写一个应用程序,用户可以直接在桌面上绘制注释(圆形,线形,矩形等)。
我正在使用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);
}
}
}
}
单击按钮时,桌面上将绘制一个矩形。但当我将鼠标移过矩形时,桌面将被重绘,我的矩形将消失。
有没有办法可以让矩形永远呆在那里(直到我清除图纸)?
感谢。
答案 0 :(得分:4)
有没有办法可以让矩形永远呆在那里(直到我清除图纸)?
如果您坚持直接在桌面上绘图,那就不行了。桌面窗口归系统所有。当系统决定需要重新绘制时,例如因为另一个窗口通过桌面,它将重新绘制桌面。由于系统不知道您希望显示什么,因此无法重新绘制注释。
如果要在桌面上显示持久状态,则必须创建一个窗口以在其中绘制该状态。创建一个透明的点击窗口,并在该窗口中绘制您将要绘制的内容。