C#NET - 在窗体上绘制不透明画笔,并将不透明度设置为

时间:2016-02-03 16:06:03

标签: c# .net winforms transparency

我想要实现的是覆盖屏幕的半透明背景。 然后能够在它上面绘制不透明的画笔。

我所尝试的是拥有一个具有屏幕大小的表单,然后设置它的颜色并设置this.opacity = 0.5。但是,这会影响表单中的所有画笔。

我也尝试将背景颜色设置为Color.Transparent,然后绘制一个覆盖屏幕的额外画笔,不透明度为0.5,然后绘制不透明画笔......但背景也变得不透明。 即使样式标志设置为(ControlStyles.SupportsTransparentBackColor, true)

我知道我可以通过另外一个表格实现这一目标。 透明背景的一种形式和不透明的前景的一种形式,但是不是过度杀伤吗?

有更好的方法吗?

更新1: 尝试评论中建议的内容。

现状: Form1:主程序,要求“覆盖”'显示,这是: Form2:叠加背景(半透明黑色)和, Form3:叠加前景,这是用户绘制的地方。

表单1和表2的作用是indended,但Form3拒绝使用透明表。 如果我设置

this.BackColor = Color.Lime;
this.TransparencyKey = Color.Lime;

然后性能下降,程序严重滞后(虽然它确实变得透明)。 理想情况下,我希望使用this.BackColor = Color.Transparent;,但这不会产生任何影响(纯色背景,没有alpha)。

请注意,表单覆盖屏幕,背景通常是桌面。也许这就是为什么它不起作用?

1 个答案:

答案 0 :(得分:0)

您可以覆盖表单的OnPaintBackground,而无需调用它的基础。 这样您就可以指定背景所需的颜色。

试试这个:

protected override void OnPaintBackground(PaintEventArgs e)
{
    using (var brush = new SolidBrush(Color.FromAgrb(50, 0, 0, 0))
    {
        e.Graphics.FillRectangle(brush, e.ClipRectangle);
    }
}