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?

War es hilfreich?

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

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top