我想要实现的是覆盖屏幕的半透明背景。 然后能够在它上面绘制不透明的画笔。
我所尝试的是拥有一个具有屏幕大小的表单,然后设置它的颜色并设置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)。
请注意,表单覆盖屏幕,背景通常是桌面。也许这就是为什么它不起作用?
答案 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);
}
}