uwp - win32 app中的亚克力 Material

标签 uwp dwm acrylic-material fluent-design

微软最近公布了他们新的“流利”设计语言,其中一部分是"acrylic" material。 .此效果使元素透明并模糊背景。它既可以应用于窗口,使底层窗口的一部分发光(背景丙烯酸),也可以应用于窗口中的单个元素,以便其他控件发光(应用内丙烯酸)。它在概念上和视觉上与 macOS 上的活力非常相似。

它在 XAML 中作为特殊的 Brush 实现,但我想知道有没有办法在常规 Win32 应用程序中使用它(背景丙烯酸)?该效果看起来非常类似于应用于开始菜单和任务栏的模糊(由 SetWindowCompositionAttribute 处理),这使我相信它可能可以通过类似的标志激活。

一个子问题:我想知道它是如何实现的?它只是您可以在窗口上设置的标志,然后在 DWM 中应用(如 SetWindowCompositionAttribute,或如 Vista 和 7 中的 Aero Glass)?还是 UWP 对 DWM 有某种控制,并且可以设置着色器来控制它的渲染方式?在 Vista 下,当 DWM 第一次被引入时,它与 WPF 有共同的代码,并且它实际上共享(类似 DirectX)的缓冲区和场景图,所以这样的技巧是可能的。放大镜实用程序可以 magnify WPF apps sharply like vector images ,但该功能后来丢失了。 MS 在该页面上呈现“丙烯酸”的方式(作为不同的图层,并作为 XAML 画笔实现)让我认为您必须以某种方式将图层注入(inject) DWM 场景图中,这将使其更难或无法使用来自 Win32。

最佳答案

Sciter 使用的亚克力效果是通过使用 SetWindowCompositionAttribute(),目前它是滞后的,但我想出了另一种方法来实现相同的亚克力效果,但方法不同。
看看这个Win32 Acrylic Effect using IDComposition and Direct2D

关于uwp - win32 app中的亚克力 Material ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931709/

相关文章:

c# - UsbDevice.FromIdAsync 返回 null

C++/WinRT UWP - HRESULT 0x80073D54 : The process has no package identity

c# - UWP 中 AppDomain.GetAssemblies() 的等价性?

aero - "create applications like Flip3D"的 API 是什么

c# - 使用 C#、WPF 和 DWM 保存窗口的屏幕截图

来自 Fluent Design System 的纯 CSS 亚克力 Material

UWP拦截Webview请求并添加header

windows - DirectX 12 "Full Screen Exclusive Windows"是否强制以与 DWM 相同的刷新率运行?

UWP 在导航 View 中使用 Acrylic