c++ - 如何在 Windows 7 中使用 D3D11 在标题栏中进行渲染?
问题描述
我有一个程序可以渲染到使用IDXGIFactory2::CreateSwapChainForHwnd
. 它将交换链清除为特定颜色,特别是绿色,并绘制一个带纹理的矩形。按照https://docs.microsoft.com/en-us/windows/desktop/dwm/customframe上的指南,我使用向下扩展窗口标题,并通过处理消息DwmExtendFrameIntoClientArea
将客户区扩展到整个窗口。WM_NCCALCSIZE
当显示交换链时,交换链缓冲区的内容被绘制在窗口顶部,完全覆盖了 DWM 绘制的玻璃框架和标题按钮。如何让 DWM 绘制玻璃框架和标题按钮的区域,同时仍使用 D3D11 在窗口框架中绘制?
我已经尝试将其清除为withRenderTargetView
的颜色,但 alpha 分量似乎被忽略了。我试图在用于创建交换链的 AlphaMode 成员中指定and ,但它崩溃了,因为 alpha 混合交换链必须由or创建。这些功能不可行,因为我想支持 Windows 7。{0.0f, 0.0f, 0.0f, 0.0f}
ID3D11DeviceContext::ClearRenderTargetView
DXGI_ALPHA_MODE_STRAIGHT
DXGI_ALPHA_MODE_PREMULTIPLIED
DXGI_SWAP_CHAIN_DESC1
CreateSwapChainForComposition
CreateSwapChainForCoreWindow
我尝试过的另一件事是创建混合状态并使部分纹理透明。所有这一切都是将纹理的透明部分与清晰的颜色混合。但是,DWM 没有渲染任何内容。
解决方案
推荐阅读
- python - 使用 Pycharm 比较 JSON 文件中的值
- rest - X-Frame-Options 和 REST API 出现错误 500
- variables - awk 使用 shell 变量通过文件中的单词搜索段落
- javascript - 保护 Asp.NET Core Uppy.js 端点
- ebnf - 如何在 EBNF 中描述带引号的字符串
- node.js - 使用 bcrypt 确保密码没有重复
- constraints - 如何在域中添加带有上标和联合的约束?
- jquery - 如何通过 css 为我的菜单添加深色背景?
- reactjs - 使用简单的硬编码密码保护反应组件
- json - 在没有 JSPath 的 Play 框架中验证 JSON