如何用Vortice和DirectComposition实现透明窗口的显示?

摘要:通过 DirectComposition 配合 WS_EX_LAYERED 或 WS_EX_NOREDIRECTIONBITMAP 窗口样式,可以让窗口高性能地背景透明,完全依靠 DWM 将窗口背景和桌面画面合成
本文是渲染相关系列博客中的一篇,该系列博客已按照逻辑顺序编排,方便大家依次阅读。如您对渲染相关感兴趣,可以通过以下链接访问整个系列:渲染相关系列博客导航 在 DirectX 使用 Vortice 从零开始控制台创建 Direct2D1 窗口修改颜色 博客中和大家介绍了最简方式创建了窗口和对接了 DirectX 层。在此基础上,大家也能看到此时创建的窗口是无法应用透明背景效果的 即使强行设置 SwapChainDescription1.AlphaMode 为 AlphaMode.Premultiplied 也会在 IDXGIFactory2.CreateSwapChainForHwnd 报错 传统 Win32 应用可以通过 UpdateLayeredWindow 方法设置窗口透明,然而 UpdateLayeredWindow 是有比较大的性能代价的,详细请参阅 WPF 从最底层源代码了解 AllowsTransparency 性能差的原因 性能较好的透明窗口实现可参阅 WPF 制作支持点击穿透的高性能的透明背景异形窗口 以上是在 WPF 框架里面帮忙封装好的,现在咱只有纯控制台,需要自己手动干一些活 为了方便大家阅读,本文将重新从零控制台开始,先创建好 WS_EX_LAYERED 的窗口,再将 DirectX 对接上去。总代码控制在 500 行左右。额外,为了方便 Win32 方法调用,本文还请出了 CsWin32 库,详细使用方法请参阅 dotnet 使用 CsWin32 库简化 Win32 函数调用逻辑 准备工作 按照 .NET 惯例,先安装一些库。
阅读全文