Chrome-Stil Von C# - Anwendungen?
Ich spreche nicht über die vista-glass-Funktion, ich weiß schon, wie das zu schaffen. Die Funktion, die ich spreche, ist die Steuerelemente Hinzugefügt, um die Titelleiste, wie office 2007 erzeugt mit dem logo und der Symbolleiste.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie einige Win32 interop zu erreichen, die Effekt. Je nachdem, ob Sie mit Winforms oder WPF, die Art, wie Sie Haken an der message-Verarbeitung unterscheidet sich (ich kann mich nicht erinnern, Winforms, also werde ich alles geben Beispiele für WPF). Aber in beiden Fällen müssen Sie:
Abfangen der Erstellung des Fensters und ändern Sie die window styles und extended styles. In WPF, die Sie brauchen, um zu Erben aus
hwndsource verwenden
und ändern Sie dieHwndSourceParameters
um dies zu erreichen. Sie müssen WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS und WS_VISIBLE für regelmäßige Stil und WS_EX_WINDOWEDGE und WS_EX_APPWINDOW erweiterte Stile.Fügen Sie eine message-handler-throught er hwndsource verwenden Parameter HwndSourceHook.
In der Nachricht proc Hinzugefügt, durch den Haken in Schritt zwei, müssen Sie mehrere Nachrichten:
WM_NCACTIVATE
zu ändern - die Malerei der Titel, wenn die app aktiviert ist oder nichtWM_NCCALCSIZE
- zurück zu den OS, die Sie nicht haben, nicht-client-Bereichewerden wm_ncpaint
- im Allgemeinen müssen Sie invaldate das Fenster rect nur hier, WPF kümmert sich dann um die eigentliche Malerei)WM_NCHITTEST
- Prozess zu bewegen der Fenster, minimieren und maximieren.Sobald Sie die oben genannten, Ihre client-Bereich, wo WPF ist die Farbe, Ihre visuelle Struktur wird sich über die ganze Fläche des Fensters. Sie müssen die "nicht-cliet" visuals, so dass die Anwendung sieht aus wie eine normale Anwendung für den Benutzer.
Müssen Sie möglicherweise mehrere Nachrichten mehr:
WM_THEMECHANGED
wenn Sie wollen, ändern Sie Ihre "non-client-Bereich" Malerei, um die Konsistenz mit der OS-themeWM_DWMCOMPOSITIONCHANGED -
wenn Sie möchten, erweitern Glas-und Holen Sie sich die standard-Betriebssysteme NC-Glas-Malerei, wenn glass aktiviert ist, und wechseln Sie zu Ihrer eigenen Logik, wenn das Glas nicht.Vielleicht möchten Sie sich auf die Win32-Theme-APIs wenn Sie möchten, Holen Sie die standard-Win32-Vermögen für Grenzen, Beschriftung, in der Nähe, mininmize und maximieren-Schaltflächen verwenden in Ihrer 'nicht-client-Bereich".
Wenn Sie möchten, erweitern Glas in Ihrem Fenster, den man sich anschauen kann:
DwmExtendFrameIntoClientArea
- um die standard-Glas-NC-BereichDwmDefWindowProc
- um den desktop manager zu malen, Glas-und standard-NC-SteuerungenDwmIsCompositionEnabled
- um festzustellen, ob Glas aktiviert ist; Sie können die beiden oben genannten APIs nur, wenn Glass aktiviert ist. Wenn Glas nicht aktiviert ist, müssen Sie Ihre eigenen Zeichnung der NC-Bereich.Finden Sie die richtige C# Definitionen für alle Nachrichten, die Stile und die entsprechenden Win32-APIs Sie müssen auf P/Invoke.
Könnte man auch einen ähnlichen Effekt durch die Verwendung von standard-WPF-Fenster mit einem
WindowStyle=none
. Es gibt jedoch einige Unterschiede zwischen dem Verhalten der desktop in Richtung Ihrer app und anderen apps; offensichtlichste davon ist, dass Sie nicht in der Lage zu stapeln oder nebeneinander Ihre Fenster, indem Sie mit der rechten Maustaste auf die Taskleiste.Können Sie auch einen Blick in einige third-party-Komponenten, die es ermöglichen, einige dieser Funktionalitäten. Ich habe nicht (wie Sie sehen können, ich bin nicht erschrocken von Win32 interop :-)), also ich kann nicht empfehlen Ihnen einen bestimmten.
Als Franci erwähnt, was Sie wollen, ist DwmExtendFrameIntoClientArea. Hier ist ein Beispiel von Codeproject, die zeigt, wie es zu tun.
http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx
Joe Castro, ein WPF-Produkt-team-Entwickler, hat ein MSDN code gallery-Projekt namens "WPF Chrome" verwendet werden können, erstellen Sie ein office 2007-ähnliche Benutzeroberfläche (ie: Kontrollen umfassen sowohl die client-und nicht-client-Bereiche der ein-Fenster).
Finden Sie hier: http://code.msdn.microsoft.com/chrome
Habe ich die DotNetBar control suite mit gutem Erfolg.