【发布时间】: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