我想要实现的是覆盖屏幕的半透明背景。 然后能够在其上绘制非透明画笔。
我尝试的是创建一个屏幕大小的表单,然后设置它的颜色并设置 this.opacity = 0.5
。但是,这会影响表单中的所有画笔。
我还尝试将背景颜色设置为 Color.Transparent,然后在我绘制不透明画笔之前绘制一个覆盖屏幕的附加画笔,不透明度为 0.5...但是背景也变得不透明。
即使设置了样式标志 (ControlStyles.SupportsTransparentBackColor, true)
我知道我可以通过额外的表格来实现这一点。 一种形式用于透明背景,另一种形式用于不透明前景,但这不是矫枉过正吗?
有没有更好的办法?
更新 1: 尝试评论中的建议。
当前状态: Form1:主程序,调用'overlay'来显示,即: Form2:叠加背景(半透明黑色)和, Form3:覆盖前景,这是用户绘制的地方。
Form 1 和 2 按预期工作,但 Form3 拒绝透明工作。 如果我设置
this.BackColor = Color.Lime;
this.TransparencyKey = Color.Lime;
然后性能下降并且程序严重滞后(尽管它确实变得透明)。
理想情况下,我想使用 this.BackColor = Color.Transparent;
但这没有任何效果(纯色背景,无 alpha)。
请注意,窗体覆盖屏幕,背景通常是桌面。也许这就是它不起作用的原因?
最佳答案
您可以覆盖表单的 OnPaintBackground
,而无需调用它的基础。
这将使您能够为背景指定任何颜色。
试试这个:
protected override void OnPaintBackground(PaintEventArgs e)
{
using (var brush = new SolidBrush(Color.FromAgrb(50, 0, 0, 0))
{
e.Graphics.FillRectangle(brush, e.ClipRectangle);
}
}
关于C# NET - 在不透明级别设置的窗体上绘制不透明画笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35181917/