有一对夫妇的技巧获得的玻璃支持。净的形式。

我觉得原来源于这种方法是在这里: 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

那个最后的步骤是该问题的任何子的控制,绘制在这一领域似乎也享黑如阿尔法透明度的面罩。

例如,卡带上的类区域将透明的文本。

有没有办法绕过这个?

是有一个更简单的方式做到这一点?

用我的工作必须在两个工作XP和Vista-我需要它们降低优雅。是否有任何最佳做法在这里?

有帮助吗?

解决方案

有真的不是一个简单的方法来做到这一点。这些Api不被暴露。净框架(尚)的,因此唯一方法就是通过某种互操作(或WPF)。

作为于工作有两个版本的Windows,该代码应该被罚款,因为运行时不会去寻找进入点DLL直到你真的叫功能。

其他提示

DannySmurf所述。你不必直接"管理的"获得这些Api虽然。净框架(我想这个我自己几个星期前)。

我做了讨厌的东西。创造我自己的用户界面与GDI+。(按钮,圆标签、等等)。它看起来相同的,无论窗版本。赢。形式是真的丑陋的,但那就是你所得到的XP < 一边。

我认为你忘了设置窗体区域的你想要的玻璃。从文章,

在你的Windows的应用程序,您 只需要设置窗体 属一种颜色,你不会用 其他地方的应用程序(I使用 干斯博勒旅,原因将 变得显而易见以后)。然后你可以 创建一个或多个面板 停靠期间,您的形式和 设定的背景色的面板 到透明度的关键。现在当你 呼叫DwmExtendFrameIntoClientArea, 玻璃将显示在它的利润 无论你已经设置的东西 适当的透明度的关键。

我不介意不受管理的电话-这是哈克的使用一个黑匣子来模仿阿尔法行为和效果然后,它已经在黑色素在一些组件上的问题。

一个便宜的黑客可以使用的是透明的控制面板在您的形式和地点你的控制对它--黑色将是黑色的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top