加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#NET – 在不透明度级别设置的窗体上绘制不透明画笔

发布时间:2020-12-16 06:51:01 所属栏目:百科 来源:网络整理
导读:我想要实现的是覆盖屏幕的半透明背景. 然后能够在它上面绘制不透明的画笔. 我试过的是一个具有屏幕大小的表单,然后设置它的颜色并设置this.opacity = 0.5.但是这会影响表单中的所有画笔. 我也尝试将背景颜色设置为Color.Transparent,然后绘制一个覆盖屏幕的
我想要实现的是覆盖屏幕的半透明背景.
然后能够在它上面绘制不透明的画笔.

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

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

我知道我可以通过增加一个表格来达到这个目的.
一个用于透明背景的表单和一个用于不透明前景的表单,但这不是太过分了吗?

有没有更好的办法?

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

当前状态:
Form1:主程序,要求’overlay’显示,即:
Form2:叠加背景(半透明黑色)和,
Form3:叠加前景,这是用户绘制的地方.

表单1和表单2表示为indended,但Form3拒绝使用透明表单.
如果我订

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

然后性能下降,程序严重滞后(虽然它确实变得透明).
理想情况下我想要使用this.BackColor = Color.Transparent;然而,这没有任何影响(固体背景,没有阿尔法).

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

解决方法

您可以覆盖表单的OnPaintBackground,而无需调用它的基础.
这将使您能够为背景指定所需的颜色.

试试这个:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读