2017-05-12 4 views
2

Microsoft vor kurzem enthüllte ihre neue "fließende" Designsprache, und ein Teil davon ist die "acrylic" material. Dieser Effekt macht ein Element transparent und verwischt den Hintergrund. Es kann entweder auf ein Fenster aufgetragen werden, so dass Teile von darunter liegenden Fenstern durchscheinen (Hintergrund-Acryl) oder auf einzelne Elemente im Fenster, so dass andere Bedienelemente durchscheinen (In-App-Acryl). Es ist konzeptionell und optisch sehr ähnlich wie die Lebendigkeit auf MacOS.Acryl Material in Win32 App

Es ist als ein spezieller Pinsel in XAML implementiert, aber ich frage mich, es gibt eine Möglichkeit, es (Hintergrund Acryl) in einer regulären Win32-App zu verwenden? Der Effekt sieht der Unschärfe sehr ähnlich, die auf das Startmenü und die Taskleiste angewendet wird (was von SetWindowCompositionAttribute gehandhabt wird), was mich zu der Annahme verleitet, dass es möglicherweise durch eine ähnliche Flagge aktiviert werden könnte.

Eine Teilfrage: Ich frage mich, wie es umgesetzt wird? Ist es nur ein Flag, das Sie in einem Fenster setzen und dann in der DWM anwenden können (wie SetWindowCompositionAttribute oder wie Aero Glass in Vista und 7)? Oder hat UWP eine Art Kontrolle über das DWM und kann Shaders einstellen, um zu steuern, wie es gerendert wird? Unter Vista, als DWM zum ersten Mal eingeführt wurde, hatte es gemeinsamen Code mit WPF und es teilte tatsächlich die (DirectX-ähnlichen) Puffer und das Szenen-Diagramm, also waren Tricks wie das möglich. Das Magifier-Dienstprogramm konnte magnify WPF apps sharply like vector images, aber diese Funktionalität wurde später verloren. Die Art und Weise, wie MS "Acryl" auf dieser Seite präsentiert (als verschiedene Ebenen und als XAML-Pinsel implementiert), lässt mich glauben, dass man Schichten in den DWM-Szenengraphen injizieren müsste, was die Verwendung schwieriger oder unmöglich machen würde von Win32.

Antwort

2

Die Effekte werden mit den XAML Composition-APIs der unteren Ebene erstellt, die den XAML-Compositor von UWP verwenden. Daher würde ich bezweifeln, dass Sie dies in Win32 nativ erreichen können. Wenn Sie es wirklich wollen, können Sie entweder Ihre App über die Desktop Bridge hinweg mitnehmen und die Benutzeroberfläche konvertieren oder die Effekte mit der heute verfügbaren Technologie nachahmen. (Browser wie Chrome, nutzen, um das Fenster Chrome weiter in ihre App zu bringen, obwohl ich nicht sicher bin, wie Sie den Acryl-Effekt erreichen würden).

2

Ich habe gerade dieses Projekt, das Acryl auf WPF bringen: https://github.com/bbougot/AcrylicWPF

Es scheint Ihre Hypothese gut waren. Es verwendet SetWindowsCompositionAttribute und wendet einen Shader darauf an.

+1

Es ist nicht der echte Acryl-Effekt von Windows 10 Fluent Design System. Es verwendet einen eigenen Shader-Effekt, der Noise.fx heißt und auf einem eigenen Prozess läuft. Der Unschärfeeffekt ist 'SetWindowsCompositionAttribute', wird jedoch nicht empfohlen. Es simuliert nur die Acrylbürste des Fluent Design Systems. – walterlv