加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 在Win32应用程序中模仿丙烯酸

发布时间:2020-12-14 04:23:56 所属栏目:Windows 来源:网络整理
导读:微软最近宣布了 Acrylic,the glass-like material in Fluent Design.它仅作为XAML / UWP呈现,但看起来非常类似于玻璃,除了它可以任意着色并且可以在应用程序中应用于天桥控件以及应用程序的独立窗口. ‘配方’使它看起来好像是implemented in XAML itself,而
微软最近宣布了 Acrylic,the glass-like material in Fluent Design.它仅作为XAML / UWP呈现,但看起来非常类似于玻璃,除了它可以任意着色并且可以在应用程序中应用于天桥控件以及应用程序的独立窗口.

‘配方’使它看起来好像是implemented in XAML itself,而不是暴露在更广泛的系统中.

一个相关的SO问题confirms this(它缺乏具体的技术答案,但暗示丙烯酸不能通过WinAPI以玻璃的方式获得.)

如何在一个普通的Win32应用程序中模仿这个?用玻璃和混合? (哪些API和what’s possible in Win10 Fall Update’s glass APIs that was not in Win7?)如果应用程序是使用Win32创建的,但使用DirectX表面进行渲染,是否会打开更多可能性?

正如在@ zett42的回答中提到的,我认为它是使用DirectComposition实现的.

一点点历史:借助Vista,微软推出了桌面窗口管理器DWM,它是桌面的合成引擎.使用DWM,窗口绘制到纹理,然后在DWM中组合.好处是你可以获得3D动画,透明度等奇特的效果,并且所有内容都是双缓冲的,因此你不会得到任何渲染工件.

DWM最初基于MIL(媒体集成层),我认为这是一个场景图API.有趣的是,那时推出的WPF也使用了MIL.这真的很酷,因为DWM可以看到WPF窗口的场景图,并且当它会如此影响时,例如放大窗口,它会将其视为向量而不是位图,因此它可以在没有工件的情况下进行缩放.但是,在某些时候,微软分叉了WPF中使用的MIL版本,并且这种集成已经丢失.

快进几年到Windows 8.微软推出了新的“Metro”应用程序(后来的“Modern”,现在是“UWP”).在幕后,这些现代应用程序使用新的组合API,DirectComposition.此API也适用于Win32应用程序,现在由DWM本身使用.如果你看一下公共DWM函数,那些与MIL相关的函数已被弃用,因此它支持我的理论,即MS从MIL转向DC.因此,现在我们再次处于初始状态,即应用程序和DWM使用相同的基础架构,我们可以轻松添加一些有趣的效果.

在某些时候,MS已经为IDCompositionDevice3接口提供的DirectComposition引入了新的混合效果.其中包括高斯模糊效果,还有噪音,色彩和其他必要的效果.我找到了一种在窗口中应用这些效果的方法,但我不知道如何将它们应用到我的窗口.不幸的是,我现在无法访问我的代码,当我这样做时,我会更新我的答案.

我的探索基于文章Efficient Alpha-Blended Windows: DirectComposition.基本上,您有一个与屏幕对应的“设备”,以及与您的窗口内容相对应的“视觉”.你需要改变的是:

>您的设备可以为您创建效果.记得QueryInterface它到IDCompositionDevice3.
>然后,您可以在IDCompositionVisual3上调用SetEffect.

但是,正如我所说,这仅适用于窗口内容.我认为必须有一个秘密API来从DWM获取当前窗口的父Visual,然后它应该只是在Visual上调用SetEffect来获得效果.如果有人熟练使用调试器,则应该可以通过跟踪使用Acyllic效果的UWP应用来找到该API.

作为一个蓝色的镜头,我会看看GetWindowCompositionAttribute函数.它最近获得了一些有趣的声音标志,例如WCA_VISUAL_OWNER.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读