HowTo: Aero Glass in C# Forms nutzen

Mich hat mal interessiert, wie ich die Aero Glass Effekte unter Windows 7 in C# Windows Forms nutzen kann. Auf codeproject.com fand ich dazu einen Artikel. Der funktioniert soweit auch schon ganz gut. Der Artikel zeigt, wie man einen Rand um seine Arbeitsfläche zieht, der den Aero Glass Effekt nutzt. Möchte man nun aber den ganzen Hintergrund durchsichtig haben, so müssen die Margins auf -1 gesetzt werden:

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (DwmIsCompositionEnabled())
            {
                // Paint the glass effect.
                this.margins = new MARGINS {Top = -1, Left = -1, Bottom = -1, Right = -1};
                DwmExtendFrameIntoClientArea(this.Handle, ref margins);
            }
        }

Nun ist der ganze Arbeitsbereich durchsichtig. Doch sobald man GDI+-Controlls verwendet, ergibt sich folgender Grafikfehler:

Um dies zu umgehen, müsst ihr in der Main()-Methode folgendes einfügen (bzw. anpassen)

Application.SetCompatibleTextRenderingDefault(true);

Das Ergebnis sieht schon besser aus, leider immer noch nicht so wie gewünscht.

Leider liegt das aber am System bzw. den Controls im .NET-Framework. Unter WPF gibt es dieses Problem zum Beispiel nicht.
Wie ihr die Aero Glass Effekte in WPF nutzen könnt, findet ihr etwa bei Robert Mühsig.

Ach ja, falls ihr nun Bereiche haben wollt, die nicht durchsichtig sind, könnt ihr zum Beispiel ein Panel nutzen. Das Ergebnis sieht in etwa so aus:

Resharper

So, letzte Woche die WPF Schulung hinter mir gebracht. War sehr interessant, wenn auch sehr viel Input, da es eigentlich ein 3-Tage Kurs ist, er aber Aufgrund von zeitlichen Problemen auf 2 Tage gekürzt werden musste.
Also WPF betrachte ich jetzt mit anderen Augen, bin zwar noch nicht vollkommen überzeugt, stehe dem aber offener gegenüber. Und wenn Microsoft sich nicht ganz doof anstellt und das arbeiten mit WPF unter Visual Studio 2010 noch vereinfachter (z.B. ein schönere Intellisenseunterstützung), dann könnt das definitiv was werden.

Durch den Referendar Mathias Raacke (meiner Meinung nach ein sehr fähiger Referendar, sehr zu empfehlen und immer wieder gerne) bin ich auf Resharper gestoßen. Ich bin zwar schon vorher mal drüber gestolpert, aber der Preis hatte mich doch etwas abgeschreckt. Es bietet echte Vorteile und ist voll konfigurierbar. Ein absolutes Muss für jede VS Umgebung! Auf der Seite gibt es eine 30 Tage Testversion!

Ach ja nebenbei hab ich mal meinen Texteditor rausgeholt und mal wieder ein bischen PHP gemacht. Meine Idee nimmt langsam Formen an. Ach ja und Smarty (PHP Template Engine) ist gar nicht mal so schlecht, wie ich gut 5 Jahre gedacht habe. Manchmal ist dieser Drang, immer das Rad neu zu erfinden, nur um nicht auf Third-Party-Products zurückzugreifen, echt nervig!
(Würde ich auch gerne mal einem Kollegen klar machen!)

WPF – erstes Fazit

Also ich habe heute mal den ganzen Tag damit verbracht in WPF / XAML zu arbeiten. Mein Fazit fällt eher negativ aus. Man kann damit sicherlich schon ein paar nette Dinge machen und gerade für Projekte, in denen Programmierung und Design getrennt sind, oder sogar von unterschiedlichen Personen gemacht werden, wobei der eine vom anderen keinen Schimmer hat, super! Allerdings gibt es da ein paar Markel die mir einfach auf den Wecker gehen.

Mittlerweile bin ich es gewohnt, schön mit Intellisence zu arbeiten. In XAML nur ungenügend implementiert.
Die Vorschau muss sich immer wieder neu rendern, das bremst das Programm etwas ab. Das ist aber nicht mal schlimm. Das Programm ist beim ersten Start auch arschlahm.
Die Vorschau bzw. der Designer zeigt die Sachen anders an, als sie letzendlich aussehen werden. Das find ich als eines der größten Probleme.

Meiner Meinung sind das die drei Hauptpunkte, mich persönlich von WPF (vorerst) zu distanzieren. Wenn man kein Klickibunti Kram oder grafisch besonders anspruchsvolle Interfaces braucht sondern nur funktionielle Forms, kann man auf die 08/15 Windows Forms zurückgreifen.
Leider werd ich trotzdem in XAML weiterbasteln dürfen, da ich im Moment nur die Pluginentwicklung / -schnittstelle für ein Überwachungstool programmiere, das Haupttool wird von einem Kollegen programmiert und der möchte natürlich, dass die Masken identisch aussehen. Mir wurst, ich werde es aber für meine anderen Projekte definitiv nicht nutzen.

Xaml

Also irgendwie bin ich noch nicht so recht überzeugt vom WPF (-Anwendungen).. Es macht schon was her, man kann damit nette Effekte zaubern. Aber man merkt schon, dass es noch in den Kinderschuhen steckt und auch im Internet ist da noch nicht so viel zu finden von. Mein Kollege ist ja absolut überzeugt davon, so dass wir unser aktuelles Projekt, bzw. das Frontend in WPF gestalten. Für mich reichen eigentlich auch die 08/15 Standard Windows Forms. Naja zum Glück hält sich mein Part bzgl. WPF doch recht in Grenzen und ich kann mich auf C#/.NET konzentrieren. Eigentlich sollten wir ja eine WPF Schulung anfang des Monats haben, leider musste der Referent kurzfristig ins Krankenhaus und auf die schnelle wurde noch kein Ersatztermin gefunden, an dem ich auch keine Schule habe.

Mal sehen was wird..