Graphics g = Graphics.FromHwnd(form.Handle);
在其控制下在表单背景上绘制。这是你想要完成的吗?
// draw the rectangle
Brush b = new SolidBrush(Color.FromArgb(20, 0, 0, 255));
g.FillRectangle(b, new Rectangle(5, 5, 200, 200));
// clear the rectangle
g.Clear(this.BackColor);
如果我直接在屏幕上绘图,则:
Graphics g = Graphics.FromHwnd(IntPtr.Zero);
Windows 刷新屏幕后,该矩形立即消失。
还有第三种选择,这并不是很简单。
不绘制矩形,而是创建一个降低不透明度、将 TopMost 属性设置为 true 且没有边框的表单。然后使其对事件透明:
protected override void WndProc(ref Message m)
{
const int WM_NCHITTEST = 0x0084;
const int HTTRANSPARENT = (-1);
if (m.Msg == WM_NCHITTEST)
{
m.Result = (IntPtr)HTTRANSPARENT;
}
else
{
base.WndProc(ref m);
}
}
之后您唯一需要注意的是此表单的 Visible、Location 和 Size 属性。