C#无边框窗体的透明边框

5
我正在创建一个无边框的表单,想要添加自定义边框。然而,当我为表单添加背景时,它并没有显示得很好,而且不是透明的。
这是我想用作边框的内容: Screenshot 当我将表单的透明度设置为白色时,阴影消失了,我不知道该怎么办。

WinForms。我认为在WPF中做会更容易? - ptr0x01
使用类似Fuchsia的颜色作为透明色可能比较顺利(并且更常用)。 - Brad Christie
这没有意义,一个透明的窗口怎么可能投射阴影呢?不要设置TransparencyKey。 - Hans Passant
2个回答

6

在WinForms中,有一种使用半透明(alpha)图像作为表单背景的方法,如此文章所述:可爱的金鱼桌宠(使用alpha-PNG和GDI+)

它使用本地交互与桌面混合图像。

还可以参考UpdateLayeredWindow function (User32.dll)pinvoke.net上的示例,了解如何使用它。

[编辑]

在pinvoke.net上也有一个链接,链接到Mike Swanson 的博客文章,介绍相同的主题。它使用上述链接中描述的相同代码,但这是一个VS项目,可以实现OP想要的效果:使用半透明PNG图像作为背景的启动窗体。


使用UpdateLayeredWindow()只是使用Opacity和TransparencyKey属性的困难方式。 - Hans Passant
@Hans:TransparencyKey 只定义了一个颜色作为透明颜色,类似于 GIF 图像支持透明度。OP 想要实现的是对 alpha 通道的完全支持,允许在 PNG 文件中进行精细的不透明度渐变。 - vgru

2

好吧,我有点作弊了,但我所做的只是重写CreateParams以绘制阴影,即使这是一个无边框窗口。它完全符合我的要求,所以我选择了它。
感谢所有的帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接