我有一个程序可以渲染到用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_PREMULTIPLIED
和DXGI_SWAP_CHAIN_DESC1
,但是由于必须由{{1 }}或CreateSwapChainForComposition
。这些功能不可行,因为我想支持Windows 7。
我尝试过的另一件事是创建混合状态并使纹理的一部分透明。所有这些操作就是将纹理的透明部分与清晰的颜色融合在一起。 DWM并没有呈现任何内容。