带有透明区域作为按钮的C#PNG图像
我正在尝试在表单顶部添加一个按钮,用于传播web内容。按钮应该是一个圆形PNG图像,带有一些透明区域(因为这些区域我不能仅仅使用GraphicPath circle来管理它) 当然,我的PNG在透明背景下保存得很好。在designer中,我将前景色和背景色都设置为透明。这样,如果我从按钮中删除图像,按钮是完全透明的。但对于PNG图像,它不是 我发现这个代码: 我的问题是我无法使用它。如果我只是将其复制到我的应用程序的命名空间中,MainForm designer会给我一个错误:带有透明区域作为按钮的C#PNG图像,c#,transparency,C#,Transparency,我正在尝试在表单顶部添加一个按钮,用于传播web内容。按钮应该是一个圆形PNG图像,带有一些透明区域(因为这些区域我不能仅仅使用GraphicPath circle来管理它) 当然,我的PNG在透明背景下保存得很好。在designer中,我将前景色和背景色都设置为透明。这样,如果我从按钮中删除图像,按钮是完全透明的。但对于PNG图像,它不是 我发现这个代码: 我的问题是我无法使用它。如果我只是将其复制到我的应用程序的命名空间中,MainForm designer会给我一个错误: th
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
“无法找到指定区域性的适当来源”
我做得好吗?仅仅创建这个类的一个实例就足够了吗
谢谢Windows窗体是使用GDI和GDI+绘制的,它们正确处理透明度的能力有限,因为在GDI最初创建时,透明度不是一个考虑因素的功能。也就是说,有些函数在某种程度上会处理透明度,比如函数 因此,您可能想知道“如何在Windows窗体中实现透明度?”——这不是“真正的”透明度,更多的是事后考虑(或黑客)为GDI(以及Windows窗体控件)提供“透明度” 这个技巧是UXTheme调用的一个函数,它主要查看控件下面的内容,并在绘制子控件之前将其绘制到表面 尝试将控件子类化并用颜色填充其客户端区域。透明:
public class TestControl : Control
{
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(System.Drawing.Color.Transparent);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
pevent.Graphics.Clear(System.Drawing.Color.Transparent);
}
}
控件绘制为完全黑色,对吗?这是因为GDI并不真正知道什么是“透明的”
因此,您需要覆盖OnPaintBackground事件,并在其中执行对DrawThemeParentBackground的调用
此外,请尝试以下方法:
现在,由于GDI缺少UI开发人员想要的许多功能,他们都转向了WPF,这是一个完全不同的野兽,但会按照您的要求去做,不会有太多麻烦 我对你的确切问题有点困惑。您是否遇到透明度方面的问题(如果是,请阅读GDI和GDI+中的透明度…您是否创建自己的控件作为按钮?按钮是否根本找不到您正在寻找的资源或其他资源?还有,您所说的“扩散web内容”是什么意思?我必须放下一个带有透明区域的PNG图像,作为按钮。在我找到的代码中,人们说我们可以通过创建一个“自定义”控件来获得这个结果。“Web内容”是一个网页,它的内容可以随时间变化,这就是为什么我需要真正的透明度,因为我无法将背景色调整到页面的颜色,使其成为“透明的”。我想你很难用Windows窗体做到这一点。您可能想考虑为此移到WPF。谢谢。我想我会用一种“受限”的方式来做——我会放弃内部的透明度,只使用一些图形路径类来使用一个透明的形式,它只会使我的按钮出现在一个圆圈中。@GrigoryKornilov,没问题。事实上,我已经花了很多时间研究Windows窗体、GDI、GDI+、Windows Glass等的可行性/不可行性。因此,如果您可以更新您的问题,并包括一些您试图实现的目标(理想情况下)、当前的外观等的图片。如果我能够直观地看到问题,我可能会提供更多帮助。