C#XP中的透明度

C#XP中的透明度,c#,transparency,splash-screen,C#,Transparency,Splash Screen,我有一个小飞溅窗口: public partial class Splash : Form { bool painted = false; public Splash() { InitializeComponent(); } protected override void OnPaint(PaintEventArgs e) { // } protected override void OnPaintBackground(PaintEvent

我有一个小飞溅窗口:

public partial class Splash : Form
{

  bool painted = false;

  public Splash()
  {
    InitializeComponent();
  }

  protected override void OnPaint(PaintEventArgs e)
  {
    //
  }

  protected override void OnPaintBackground(PaintEventArgs e)
  {
    if (painted)
        return;

    Graphics gfx = e.Graphics;
    gfx.DrawImage(Properties.Resources.Splash, ClientRectangle);
    painted = true;
  }
}
Properties.Resources.Splash
是一个带有alpha的PNG,在我的Windows 7开发计算机上显示得非常漂亮

然而,在Windows XP目标计算机上,没有透明度;相反,图像的背景是黑色的


我知道在XP中可以显示一个透明的启动窗口,因为我以前见过它。可以在.net中完成吗?如果是,如何使用WS_EX_LAYERED实现,但需要一些努力和一些p/Invoke:


这里还有一篇旧文章,但不知道它是否仍然有效:

我认为XP不支持带有完整alpha通道的windows。您可以使用颜色关键点设置一种100%透明的颜色,但除此之外,您运气不佳。大多数较旧的程序在alpha混合的初始屏幕上使用了一个小技巧:在你的窗口将要出现的地方创建一个屏幕截图,并将其用于背景绘制。我接受这个答案,因为它是一个很好的答案,但我没有测试过,也没有使用它。然而,我确实实现了马里奥对我的问题的评论,这一评论非常有效,而且很容易实现。看看其他商业软件,似乎他们通常都在使用马里奥的方法拍摄该区域的屏幕截图。只有当他们链接到微软网站时,链接才会特别回答,而这些网站上的文章往往会一直消失,这不是一个好主意。如有可能,请在此处提供详细信息。