如何在Windows 7中使用D3D11在标题栏中进行渲染?

时间:2019-05-09 00:47:55

标签: c++ winapi direct3d11 dwm

我有一个程序可以渲染到用IDXGIFactory2::CreateSwapChainForHwnd创建的D3D11交换链。它将交换链清除为特定的颜色,特别是绿色,并绘制一个带纹理的矩形。按照https://docs.microsoft.com/en-us/windows/desktop/dwm/customframe的指南,我使用DwmExtendFrameIntoClientArea向下扩展了窗口标题,并通过处理WM_NCCALCSIZE消息将客户区域扩展到了整个窗口。显示交换链时,交换链缓冲区的内容绘制在窗口顶部,完全覆盖了DWM绘制的玻璃框架和字幕按钮。在仍然使用D3D11在窗口框架中绘制时,如何保留DWM绘制的玻璃框架和标题按钮区域?

我已经尝试用RenderTargetView{0.0f, 0.0f, 0.0f, 0.0f}清除为ID3D11DeviceContext::ClearRenderTargetView的颜色,但是alpha分量似乎被忽略了。我尝试在用于创建交换链的DXGI_ALPHA_MODE_STRAIGHT的AlphaMode成员中指定DXGI_ALPHA_MODE_PREMULTIPLIEDDXGI_SWAP_CHAIN_DESC1,但是由于必须由{{1 }}或CreateSwapChainForComposition。这些功能不可行,因为我想支持Windows 7。

我尝试过的另一件事是创建混合状态并使纹理的一部分透明。所有这些操作就是将纹理的透明部分与清晰的颜色融合在一起。 DWM并没有呈现任何内容。

0 个答案:

没有答案