C# Winforms透明表单问题

C# Winforms透明表单问题,c#,winforms,transparency,C#,Winforms,Transparency,我试图画一个有透明背景和主体模糊阴影的形状 我这样做的方式是使用形状作为边界框,然后在其中绘制实际形状的主体,在侧面留有边距,以便阴影显示。 阴影从绘制的实体后面展开 我有一个表格,我在里面画。 我希望窗体的背景是透明的,以便只显示绘制的实体和阴影 我对阴影有一些问题。 阴影是一个位图,我在其中应用了一个RGE的高斯模糊来创建阴影效果。 位图放置在绘制的实体后面,使其显示为阴影 问题是:窗体的背景色仍在阴影所在的位置绘制。 阴影位图是透明的,但模糊的黑色除外 我尝试过将backcolor设置为t

我试图画一个有透明背景和主体模糊阴影的形状

我这样做的方式是使用形状作为边界框,然后在其中绘制实际形状的主体,在侧面留有边距,以便阴影显示。 阴影从绘制的实体后面展开

我有一个表格,我在里面画。 我希望窗体的背景是透明的,以便只显示绘制的实体和阴影

我对阴影有一些问题。 阴影是一个位图,我在其中应用了一个RGE的高斯模糊来创建阴影效果。 位图放置在绘制的实体后面,使其显示为阴影

问题是:窗体的背景色仍在阴影所在的位置绘制。 阴影位图是透明的,但模糊的黑色除外

我尝试过将backcolor设置为transparent,或misc color,然后将transparencykey设置为相同的颜色。结果保持不变

我想要达到的目标:

(浅粉色不是程序的一部分,想象一下它是桌面)

我得到的图片:

(我只是为本例绘制阴影,而不是白色主体(效果很好),窗体的背景拒绝在阴影存在的地方变得透明..)

这是创建阴影位图的代码

    private void _CreateShadow()
    {
        shadowImg = new Bitmap(m_ShadowRect.Width, m_ShadowRect.Height, PixelFormat.Format32bppArgb);
        Graphics g = Graphics.FromImage(shadowImg);
        int diameter = Math.Min(shadowImg.Width, shadowImg.Height);
        g.DrawEllipse(m_ShadowPen, m_ShadowWidth, m_ShadowWidth, m_BodyRect.Width - m_ShadowWidth, m_BodyRect.Height - m_ShadowWidth);
        filter.ApplyInPlace(shadowImg);
    }

    private void _DrawShadow(Graphics g)
    {
        g.DrawImage(shadowImg, m_ShadowRect.X, m_ShadowRect.Y);
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);

        _DrawShadow(pe.Graphics);
        _DrawBody(pe.Graphics);
    }
请,有什么指示吗?

看看这个,主要是第123-131行、第253-415行。代码使用GDI+方法绘制透明位图,以替换窗体背景


无法在
表单上绘制任何透明的内容,因为所有方法(如
OnPaint
)都使用
Format24bppRgb
而不是
Format32bppArgb
,这正是您需要的。

您可以使用分层窗口。对于具有复杂形状、设置形状动画或希望使用alpha混合效果的窗口,使用分层窗口可以显著提高性能和视觉效果。下面是一个使用png图像创建形状表单的示例:@RezaAghaei谢谢,此方法与下面评论的方法相同。很好的回答有什么方法可以将表单的原始onpaint(用于阴影位图以外的其他图形)与建议的方法一起使用吗?我曾尝试同时使用这两种方法,但程序只是将所有内容完全透明。我过去曾尝试过
OnPaint
,结果取决于操作系统版本,Windows 8无法绘制alpha颜色,但Windows 10可以。Alpha颜色只有在不将
base.OnPaint(e)放进去的情况下才起作用。此外,在重画时,还必须清除所有内容,否则透射颜色会相互重叠。