有一些技巧可以让 .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
最后一步是问题所在 - 在该区域上绘制的任何子控件似乎也将黑色视为 alpha 透明度蒙版。
例如,类区域上的标签条将具有透明文本。
有没有解决的办法?
有没有更简单的方法来做到这一点?
我正在处理的应用程序必须同时在 XP 和 Vista 上运行——我需要它们优雅地降级。这里有什么最佳实践吗?