Windows Aero Glas in eigenen Projekten nurzen Teil 3
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!
Bild 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
Windows 7 APIs lernen mit dem Microsoft Training Kit & Code Pack
Seit nun ca 3 Tagen ist das Microsoft Windows 7 Training Kit da und ich habe mir heute mal die Zeit genommen da erwas reinzuschauen!
Wem das nichts sagt, das Training Kit ist ein Paket mit Beispielen und Erklärungen, das Microsoft zu jedem neuen Produkt herausgibt. Dort finden sich sehr viele ausführliche Beispiele für die neuen Funktionen des Systems und die neuen APIs werden vorgestellt.
Bild 1: So sieht die Startseite des Training Kits aus
In dieser Ausgabe geht es vorallem um diese Themen:
- Taskbar
- Libraries
- Multi Touch
- Sensors and Location
- Ribbon
- Trigger Start Services
- Instrumentation and ETW
- Application Compatability
- Version Checking
- UAC Data Redirection
- Session 0 Isolation
- Installer Detection
- User Interface Privilege Isolation
- High DPI
Ich konnte leider noch nichts testen, da ich Windows 7 nicht installiert habe, aber nach ein wenig Durchfliegen kann ich es nur empfehlen. Für alle, die Aktuell bleiben wollen ist es sowieso ein Muss!
Passend dazu gibts auch das neue Code Pack aus der MSDN Code Gallery. Dieses besteht ebenfalls aus vielen Beispielen, von denen auch viele 2 Sprachig sind!
Dieses Code Pack beschäftigt sich mit:
- Windows 7 Taskbar Jump Lists, Icon Overlay, Progress Bar, Tabbed Thumbnails, and Thumbnail Toolbars.
- Windows 7 Libraries, Known Folders, non-file system containers.
- Windows Shell Search API support, a hierarchy of Shell Namespace entities, and Drag and Drop functionality for Shell Objects.
- Explorer Browser Control.
- Shell property system.
- Windows Vista and Windows 7 Common File Dialogs, including custom controls.
- Windows Vista and Windows 7 Task Dialogs.
- Direct3D 11.0, Direct3D 10.1/10.0, DXGI 1.0/1.1, Direct2D 1.0, DirectWrite, Windows Imaging Component (WIC) APIs. (DirectWrite and WIC have partial support)
- Sensor Platform APIs
- Extended Linguistic Services APIs
- Power Management APIs
- Application Restart and Recovery APIs
- Network List Manager APIs
- Command Link control and System defined Shell icons.
Das interessanteste dürften hier die in Windows 7 neuen Jumplists und Sensoren sein!
Mehr Infos dazu hier.
Windows Presentation Foundation wird immer beliebter
Wer mit dem Begriff WPF (Windows Presentation Foundation) nichts anfangen kann, dem sei gesagt, dass das die Zukunft von Windows ist! Genau ist WPF die Art, wie Fenster und Inhalte auf der Grafischen Oberfläche (sozusagen 7es Layer) dargestellt werden.
Bisher (schon seit der Geburt von den Fenstern) hat GDI bzw, GDI+ die Darstellung der übernommen, doch nun ist Zeit für etwas neues! Denn wenn man mal über die Schulter schaut, und auf die Mac-Welt blickt wird man schnell sehen, dass die "normalen" Windows Anwendungen nicht mit den "Stylishen" Mac Programmen, die hüpfen und rotieren nicht mithalten können!
Genau da setzt WPF an und fügt verschiedenste 3D-, Video-, Bewegungs- und Vektorfunktionen ein, also das was bisher gefehlt hat.
Seit 2005 gibt es WPF übrigens schon und seit dem ist es auch schon fester Bestandteil von dem Visual Studio. Doch wird es bisher leider kaum noch eingesetzt, was wohl auch an der eher bescheidenen Implementierung im Visual Studio seitens Microsoft liegt.
Dabei sind die Funktionen revolutionär, und alle zukünftigen Applikationen von Microsoft, wie zB. Visual Studio 2010 werden darauf basieren und uns hoffentlich ein besseres Bedienerlebnis liefern können.
Es gibt aber natürlich auch heute schon Firmen, die den Trend erkannt haben und ihre Software überarbeiten. Denn diesen Mehrwert darf man nicht unterschätzen, denn jeder der schon mal mit einer Warenwirtschaftssoftware gearbeitet hat weis was ich meine!
Hier habe ich ein Beilspiel wie Warenwirtschaft aussehen könnte. "Auf den ersten Blick vermutet man, das ist ein ganz anderes Betriebssystem, bis man die Windows Taskleiste sieht" so geschrieben auf der Seite!
Und es ist wahr, wenn ich schon ein so schönes, "sexy" Programm sehe habe ich natürlich auch viel mehr Vergnügen daran damit zu arbeiten!
Ich hoffe es wird bald mehr Firmen geben, die WPF einsetzen werden und uns somit viele schöne, bunte Programme bescheren!
Und auch aus den selben Gründen werde ich hier auch in Zukunft einige Tutorials und kleine Beispiele zum Thema WPF posten.
