Существует несколько приемов получения поддержки стекла для форм .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 - мне нужно, чтобы они корректно ухудшались. Есть ли здесь лучшие практики?