Hilfe .NET WinForms-Anwendungen bekommen Vista Aero Glass zu unterstützen
-
01-07-2019 - |
Frage
Es gibt ein paar Tricks, um für .Net Formen Glas Unterstützung zu bekommen.
Ich denke, dass die ursprüngliche Quelle für diese Methode ist hier: http://blogs.msdn.com/tims/archive/2006/04/18/578637.aspx
Grundsätzlich gilt:
//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
Die letzte Schritt ist die Frage -. Alle Unter Kontrollen über diesen Bereich gezogen scheint auch als Alphamaske schwarz zu behandeln
Zum Beispiel ein Tableiste über den Klassenbereich wird transparent Text hat.
Gibt es eine Möglichkeit, um dieses?
Gibt es einen einfacheren Weg, dies zu tun?
Die Anwendungen arbeite ich an haben sowohl auf XP und Vista arbeiten - ich sie brauche anmutig abzubauen. Gibt es Best Practices hier?
Lösung
Es ist wirklich kein einfacher Weg, dies zu tun. Diese APIs werden von .NET Framework ausgesetzt (noch) nicht, so dass der einzige Weg, es zu tun durch eine Art von Interop ist (oder WPF).
Wie für die Arbeit mit Windows-Versionen, die Code, den Sie haben sollte in Ordnung sein, da die Laufzeit nicht für den Einstieg in die DLL-Suche geht, bis Sie die Funktion tatsächlich nennen.
Andere Tipps
DannySmurf hieß es. Sie haben keinen direkten „verwaltet“ Zugriff auf diese APIs obwohl das .NET Framework (Ich habe versucht, mich vor ein paar Wochen).
ich am Ende etwas Gemeines tun. meine eigene UI mit GDI + erstellt. (Knöpfe, Etiketten gerundet, etc). Es sieht gleich, unabhängig von der Windows-Version. Win.Forms ist wirklich hässlich, aber das ist alles, was Sie auf dem XP
Ich glaube, Sie die TransparencyKey des Bereichs einzustellen vergessen haben, Glas sein wollen. Aus dem Artikel,
In Ihrer Windows Forms-Anwendung, Sie müssen einfach nur die TransparencyKey einstellen Eigenschaft auf eine Farbe, die Sie nicht verwenden an anderer Stelle in der Anwendung (ich benutze Gainsboro, aus Gründen, die wird wird offensichtlich später). Dann kannst du legen eine oder mehrere Platten, die Dockte an den Rand des Formulars und die Hintergrundfarbe für das Panel auf die Transparenz-Taste. Nun, wenn Sie rufen DwmExtendFrameIntoClientArea, die Glas wird innerhalb seiner Ränder zeigen wo immer Sie haben etwas von der Set angemessene Transparenz-Taste.
Ich habe nichts dagegen, die nicht verwaltet Anrufe - es ist der Hack ist eine Blackbox mit dem Alpha-Verhalten und die Wirkung zu imitieren sie hat dann auf schwarzem Element in einigen Komponenten auf das ist das Problem
.Ein günstiges Hack Sie verwenden können, ist eine transparente Panel-Kontrolle über Ihre Form zu platzieren und platzieren Sie Ihre Kontrollen auf sie - schwarz wird dann schwarz
.