首页 > 解决方案 > 如何在 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::ClearRenderTargetViewDXGI_ALPHA_MODE_STRAIGHTDXGI_ALPHA_MODE_PREMULTIPLIEDDXGI_SWAP_CHAIN_DESC1CreateSwapChainForCompositionCreateSwapChainForCoreWindow

我尝试过的另一件事是创建混合状态并使部分纹理透明。所有这一切都是将纹理的透明部分与清晰的颜色混合。但是,DWM 没有渲染任何内容。

标签: c++winapidirect3d11dwm

解决方案


推荐阅读