C# 透明键不适用于windows 7基本主题
我有一张表格。我将表单的backcolor和transparency键设置为limeGreen以使表单透明C# 透明键不适用于windows 7基本主题,c#,winforms,.net-3.5,C#,Winforms,.net 3.5,我有一张表格。我将表单的backcolor和transparency键设置为limeGreen以使表单透明 this.TransparencyKey = System.Drawing.Color.LimeGreen; this.BackColor = System.Drawing.Color.LimeGreen; 这在Windows7主题上运行良好,但当我将主题从Windows7更改为Windows7Basic时,它会显示窗体的背景吗?我有办法解决这个问题吗 Windows7主题 Windo
this.TransparencyKey = System.Drawing.Color.LimeGreen;
this.BackColor = System.Drawing.Color.LimeGreen;
这在Windows7主题上运行良好,但当我将主题从Windows7更改为Windows7Basic时,它会显示窗体的背景吗?我有办法解决这个问题吗
Windows7主题
Windows7基本主题
未在未启用Aero的情况下在Windows 7上进行测试,但这将在Windows XP上100%有效:
public class XForm : Form
{
#region Default value overrides
[DefaultValue(FormStartPosition.Manual)]
public new FormStartPosition StartPosition
{
get { return base.StartPosition; }
set { base.StartPosition = value; }
}
[DefaultValue(FormBorderStyle.None)]
public new FormBorderStyle FormBorderStyle
{
get { return base.FormBorderStyle; }
set { base.FormBorderStyle = value; }
}
[DefaultValue(false)]
public new bool ShowInTaskbar
{
get { return base.ShowInTaskbar; }
set { base.ShowInTaskbar = value; }
}
[DefaultValue(typeof(Color), "LavenderBlush")]
public new Color TransparencyKey
{
get { return base.TransparencyKey; }
set { base.TransparencyKey = value; }
}
[DefaultValue(typeof(Color), "LavenderBlush")]
public new Color BackColor
{
get { return base.BackColor; }
set { base.BackColor = value; }
}
#endregion
public XForm()
: base()
{
// set user paint style
SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
// override
FormBorderStyle = FormBorderStyle.None;
StartPosition = FormStartPosition.Manual;
ShowInTaskbar = false;
TransparencyKey = BackColor = Color.LavenderBlush;
}
protected override void OnPaint(PaintEventArgs e)
{
// do nothing
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// half opaque background
using (HatchBrush brush = new HatchBrush(HatchStyle.Percent50, this.TransparencyKey))
e.Graphics.FillRectangle(brush, ClientRectangle);
}
}
它并不能使它完全透明,但有阴影,但应该很容易找到修复它的方法=p
注意:提示,不要使用平滑(使用不同的颜色),否则图像周围会有难看的边框(除非是有意的)。在应用程序运行时,您是否正在更改主题?我很确定透明键只是Aero功能。我记得在过去尝试过使用它,我选择覆盖表单的onpaint以根据需要进行切割。Aero在windows基本主题上被禁用。只是尝试了一个快速测试,在我的windows XP虚拟机上,透明键不起作用,它在windows 7 pro上基本主题上也不起作用,但在windows 7 pro上启用Aero的标准主题上起作用。所以,是的,这似乎是Aero功能,但除了这些指向这一点的快速3测试之外,我找不到任何支持。那么@Franck的解决方案是什么呢?你的顶部屏幕截图暗示了核心问题,请注意绿色条纹是如何可见的。这是由于您的绘画程序使用每像素alpha模拟抗锯齿造成的。这会改变背景像素的颜色,它不再匹配颜色键,并使绿色条纹可见。如果在绘制时拉伸整个图像,这将延伸到整个图像。插值导致不匹配。只有在修复图像和/或绘制与设计尺寸完全相同的图像时,它才能正常工作,因此无需插值。