在我的 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 还是什么?您知道,作为开发人员,您应该确保您的软件在尽可能多的操作系统上运行,以确保更多的人使用它。
边距结构应为:
[StructLayout(LayoutKind.Sequential)]
public strict MARGINS
{
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
}
DwmExtendFrameIntoClientArea
应该在 Vista 中受支持。我认为Win7只是对截断结构更加宽容。使用非托管数据类型时要非常小心。