【问题标题】:Help getting .Net WinForms apps to support Vista Aero Glass帮助获得 .Net WinForms 应用程序以支持 Vista Aero Glass
【发布时间】:2008-09-17 18:26:40
【问题描述】:

有几个技巧可以让 .Net 表单支持 glass。

我认为这个方法的原始来源在这里:http://blogs.msdn.com/tims/archive/2006/04/18/578637.aspx

基本上:

//reference Desktop Windows Manager (DWM API)
[DllImport( "dwmapi.dll" )]
static extern void DwmIsCompositionEnabled( ref bool pfEnabled );

[DllImport( "dwmapi.dll" )]
static extern int DwmExtendFrameIntoClientArea( IntPtr hWnd, ref MARGINS pMarInset );


//then on form load
//check for Vista
if ( Environment.OSVersion.Version.Major >= 6 )
{
    //check for support
    bool isGlassSupported = false;
    DwmIsCompositionEnabled( ref isGlassSupported );

    if ( isGlassSupported )
        DwmExtendFrameIntoClientArea( this.Handle, ref margins );
...

//finally on print draw a black box over the alpha-ed area
//Before SP1 you could also use a black form background

最后一步是问题所在 - 绘制在该区域上的任何子控件似乎也将黑色视为 alpha 透明度蒙版。

例如,类区域上方的标签条将具有透明文本。

有没有办法解决这个问题?

有更简单的方法吗?

我正在处理的应用程序必须同时在 XP 和 Vista 上运行 - 我需要它们优雅地降级。这里有什么最佳做法吗?

【问题讨论】:

    标签: .net winforms windows-vista aero


    【解决方案1】:

    确实没有更简单的方法可以做到这一点。 .NET Framework(目前)尚未公开这些 API,因此唯一的方法是通过某种互操作(或 WPF)。

    至于使用这两个 Windows 版本,您拥有的代码应该没问题,因为在您实际调用函数之前,运行时不会寻找 DLL 的入口点。

    【讨论】:

      【解决方案2】:

      DannySmurf 说过。通过 .NET 框架,您没有对这些 API 的直接“托管”访问权限(几周前我自己尝试过)。

      我最终做了一些令人讨厌的事情。使用 GDI+ 创建了我自己的 UI。 (按钮、圆形标签等)。无论 Windows 版本如何,它看起来都一样。 Win.Forms 真的很丑,但这就是你在 XP

      【讨论】:

        【解决方案3】:

        我想你忘了设置你想成为玻璃的区域的 TransparencyKey。从文章来看,

        在您的 Windows 窗体应用程序中,您 只需要设置 TransparencyKey 属性为您不会使用的颜色 应用程序的其他地方(我使用 盖恩斯伯勒,出于以下原因 稍后变得明显)。那么你就可以 创建一个或多个面板 停靠在表单的边缘和 设置面板的背景颜色 到透明度键。现在当你 调用 DwmExtendFrameIntoClientArea, 玻璃将显示在其边缘 无论您在哪里设置了 适当的透明度键。

        【讨论】:

        • 谢谢,但是在 SP1 之后这不起作用 - 看起来盒子必须是黑色的。
        【解决方案4】:

        我不介意非托管调用 - 这是使用黑盒来模仿 alpha 行为以及它对顶部某些组件中的黑色元素产生的影响的黑客行为。

        【讨论】:

          【解决方案5】:

          您可以使用的一种廉价的技巧是在您的表单上放置一个透明的面板控件,然后将您的控件放在上面——黑色就会变成黑色。

          【讨论】:

            猜你喜欢
            • 2012-03-17
            • 2010-11-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-10
            • 1970-01-01
            • 2014-12-06
            • 1970-01-01
            相关资源
            最近更新 更多