MSDN(扩展窗口样式)指出:
WS_EX_NOREDIRECTIONBITMAP
:窗口不会呈现到重定向表面。这适用于没有可见内容或使用除表面之外的机制提供其视觉效果的窗口。
在这种情况下,“窗口呈现到重定向表面”与“使用表面以外的机制”是什么意思?GDI、D3D9、D3D11、D3D12中哪些属于前者,哪些属于后者?我是否应该在只使用Direct3D进行绘图时使用此扩展窗口样式?
MSDN(扩展窗口样式)指出:
WS_EX_NOREDIRECTIONBITMAP
:窗口不会呈现到重定向表面。这适用于没有可见内容或使用除表面之外的机制提供其视觉效果的窗口。
在这种情况下,“窗口呈现到重定向表面”与“使用表面以外的机制”是什么意思?GDI、D3D9、D3D11、D3D12中哪些属于前者,哪些属于后者?我是否应该在只使用Direct3D进行绘图时使用此扩展窗口样式?
WS_EX_NOREDIRECTIONBITMAP 用于使用 DirectComposition 进行渲染的 Windows。
例如,Sciter 创建具有 WS_EX_NOREDIRECTIONBITMAP 的窗口,以支持类似此处的亚克力组合效果:
这是一个使用DirectComposition和WS_EX_NOREDIRECTIONBITMAP的普通Win32窗口(非UWP)。在这样的窗口上,应该通过Direct2D手段进行渲染。使用WS_EX_NOREDIRECTIONBITMAP时,GDI渲染几乎没有用处。DirectComposition是主要的API,可以用于在不使用重定向位图的情况下绘制窗口。在没有DirectComposition的交换链中使用DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL也可能触发此模式。
使用该API时需要注意的一件事情是,窗口背景不一定会是不透明的,因此DWM会与窗口后面的东西混合,这些东西实际上并不可见。