【问题标题】:Aero Glass works fine on Windows 7, but doesn't work on VistaAero Glass 在 Windows 7 上运行良好,但在 Vista 上无法运行
【发布时间】:2014-03-15 23:28:45
【问题描述】:

要在我使用的 C# 应用程序中使用 Aero Glass

if {DWM.DwmIsCompositionEnabled())
{
    Color c = Color.FromArgb(255, 221, 220, 220);
    Transparency Key = c;
    panel1.BackColor = c;
    panel2.BackColor = c;
    MARGINS mr = new MARGINS();
    mr.T = 1800;
    IntPtr h = Handle;
    int result = DwmExtendFrameIntoClientArea(h, ref mr);
}

在设计器中:

[DllImport("dwmapi.dll")]
public static extern int DwmExtendFrameIntoClientArea(
    IntPtr h
    ref MARGINS p
};
[StructLayout(LayoutKind.Sequential)]
public strict MARGINS
{
    public int T;
}

它在 Windows 7 上运行良好,但在 Vista 上面板是黑色的而不是透明的。 Vista 上的 Aero Glass 与 7 上的不同吗?

编辑:给-1这个帖子的人,因为你讨厌Vista还是什么?您知道,作为开发人员,您应该确保您的软件在尽可能多的操作系统上运行,以确保更多人使用它。

【问题讨论】:

  • Vista 上的其他窗口(例如记事本或资源管理器)是否正常显示?另一件事:假设您使用的是 Windows 窗体,我是否安全?
  • 是的,它们显示得很好。我使用的是 Windows 窗体,没错。
  • 有人知道解决办法吗?

标签: c# windows-vista transparent aero aero-glass


【解决方案1】:

MARGINS 结构应该是:

[StructLayout(LayoutKind.Sequential)]
public strict MARGINS
{
    public int cxLeftWidth;
    public int cxRightWidth;
    public int cyTopHeight;
    public int cyBottomHeight;
}

DwmExtendFrameIntoClientArea 应该在 Vista 中得到支持。我认为 Win7 只是更能容忍截断的结构。对非托管数据类型要非常小心。

【讨论】:

  • 你能提供更多的上下文吗?您尝试了哪些方法以及如何设置相关窗口?
  • 我添加了您给我的代码并在 Vista 上调试了我的应用程序。它仍然有黑色而不是透明面板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2021-09-28
相关资源
最近更新 更多