BigBastis Blog

Windows Aero Glas in eigenen Projekten nurzen Teil 3

Introduction

user

Sebastian Gross

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.


LATEST POSTS

Handling too long scrollspy menus 10th June, 2015

Java: Create ZIP archive 23rd March, 2015

.NET

Windows Aero Glas in eigenen Projekten nurzen Teil 3

Posted on .

Es ist etwas Zeit seit dem zweiten Teil vergangen, und wie ich in den Kommentaren sehe, sind da noch ein paar Fragen offen!

Das Hauptproblem mit den Glasoberflächen unter Windows sind die GDI und GDI+ Komponenten, diese unterstützen keine Transparenz. Das macht es so schwierig diese auf Glas ordentlich zu rendern.

Wenn ihr meine persönliche Meinung hören wollt, lasst es ganz bleiben! Denn seit knapp 4 Jahren stellt Microsoft uns ein sehr mächtiges grafisches Werkzeug zur Verfügung, nämlich WPF.

WPF soll die neue Präsentationsschicht unter Windows werden. Das heißt WPF regelt wie die UI-Elemente, die wir sehen, zb. Knöpfe und Fenster aussehen und sich verhalten!

Aber ich will nicht weiter auf den Aufbau von WPF eingehen, für uns ist wichtig zu wissen, dass in WPF alle Elemente die Transparenz beherrschen. Das macht sie für uns perfekt um sie auf Glas einzusetzen!

aerowpfBild 1: Ein in WPF gerendertes Fenster mit Steuerelementen

Wie man auf dem Bild 1 gut erkennen kann, sieht man keine verpixelten Texte mehr und der Hintergrund ist wunderbar Transparent, auch bei dem Button!

Alle WPF Steuerelemente beherrschen viel mehr Optische Funktionen, so sind die beiden ProgressBars im Bild 1 ebenfalls Transparent. Das geht nicht mit GDI+!

Für alle die jetzt denken, oh nein, ich will nicht schon wieder eine neue Sprache erlernen, kann ich für Entwarnung sorgen. Auch unter WPF wird mit VB.NET und C# programmiert. Ihr könnt euren Code in 80% der Fälle komplett übernehmen!

Wie gesagt liegt der Schwerpunkt von WPF auf der Präsentation, deswegen werdet ihr die alten Grafik-Klassen nicht mehr wiederfinden. Desweiteren gibts auch keine Windows.Forms mehr, sondern nurnoch Windows (Fenster). Dies sind ein paar der Stolperfallen, durch die man sich kämpfen muss und an die man sich gewöhnen muss.

Wie ihr an dem folgenden Beispielcode sehen werdet, werdet ihr viel wiedererkennen:

Imports System.Runtime.InteropServices
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Windows.Media
Imports System.Windows
Imports System.Windows.Interop

Public Class GlassForm
 _
        Private Shared Sub DwmExtendFrameIntoClientArea _
                (ByVal hwnd As IntPtr, ByRef margin As MARGINS)
    End Sub
 _
    Public Shared Function DwmIsCompositionEnabled() As Boolean
    End Function

    Public Shared Function ExtendGlassFrame(ByVal window As Window, _
                            ByVal margin As MARGINS) As Boolean
        If Not DwmIsCompositionEnabled() Then
            Return False
        End If

        Dim hwnd As IntPtr = New WindowInteropHelper(window).Handle

        ' Hintergrundfarbe auf Tranzparent setzen, für WPF und die Win32 Ansicht
        window.Background = Brushes.Transparent
        HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = _
                                        Colors.Transparent

        Dim margins As New MARGINS(margin.left, margin.right, _
                                   margin.top, margin.bottom)
        DwmExtendFrameIntoClientArea(hwnd, margins)
        Return True
    End Function
End Class

Public Structure MARGINS
    Public left As Integer
    Public right As Integer
    Public top As Integer
    Public bottom As Integer

    Public Sub New(ByVal l As Integer, ByVal r As Integer, _
                   ByVal t As Integer, ByVal b As Integer)
        left = l
        right = r
        top = t
        bottom = b
    End Sub
End Structure

Wie man sieht ähnelt der Code sogar sehr dem aus Teil 2. Nur die entsprechenden (in WPF nicht mehr vorhandenen)  Elemente wurden angepasst.

Das tolle hierran ist, dass wir nun alle Steuerelemente benutzen können die wir wollen, ohne uns Sorgen machen zu müssen wie diese gerendert werden!

Das Demoprojekt gibts es hier: Download [VS 2008]

<< Teil 2 des Tutorials Teil 4 >>

Eventuell schiebe ich noch einen vierten Teil nach, warten wir ersteinmal eure Reaktionen ab 🙂

profile

Sebastian Gross

http://www.bigbasti.com

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.

Comments
user

Author Taken

Posted at 16:30 14. Dezember 2009.

wie öffne ich den ein wpf von einer normalen form aus?
Ich hab mich noch nie wirklich mit der wpf beschäftigt…

user

Author admin

Posted at 20:57 14. Dezember 2009.

Hallo,
leider kann man nicht (ohne weiteres) ein WPF Form aus einem Windows Forms Projekt öffnen oder erstellen. Du müsstest dann den ganzen Weg gehen, und eine neues Projekt anlegen und bei Projekte dann WPF Applikation wählen.
Nun kannst du alle Vorzüge von WPF nutzen, musst deinen bisherigen Code aber Portieren, was je nach Code leicht oder schwer werden kann!
MfG

user

Author Taken

Posted at 18:36 26. Dezember 2009.

ah.. okay, mh.. muss ich mir mal überlegen, dennoch danke

user

Author bigbasti87

Posted at 05:37 15. Juli 2010.

Bloggd: Windows Aero Glas in eigenen Projekten nurzen Teil 3 – http://blog.bigbasti.com/windows-aero-gl… #wpf #glas #fenster #vb #net

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (4) ...
Navigation