有几个技巧可以让.Net表单支持玻璃效果。
我认为这种方法的原始来源在这里: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上运行 - 我需要它们能够优雅地降级。这里有什么最佳实践吗?