什么时候应该使用WS_EX_NOREDIRECTIONBITMAP?

Sun*_*ius 10 c++ windows winapi

MSDN说(扩展窗口样式):

WS_EX_NOREDIRECTIONBITMAP:窗口不会渲染到重定向表面.这适用于没有可见内容或使用表面以外的机制来提供视觉效果的窗口.

在这种情况下,"窗口呈现到重定向表面"与"除表面之外的机制"是什么意思?以下哪一项:GDI,D3D9,D3D11,D3D12算作前者vs后者?我刚刚使用Direct3D绘图时是否应该使用这种扩展窗口样式?

c-s*_*ile 6

WS_EX_NOREDIRECTIONBITMAP 适用于使用 DirectComposition 进行渲染的窗口。

例如,Sciter使用 WS_EX_NOREDIRECTIONBITMAP 创建窗口以支持 Acrylic 合成效果,如下所示:

在此处输入图片说明

这是一个使用 DirectComposition 和 WS_EX_NOREDIRECTIONBITMAP的普通 Win32 窗口(不是 UWP)

在此类窗口上渲染应通过 Direct2D 方式完成。GDI 渲染对于 WS_EX_NOREDIRECTIONBITMAP 几乎没有用。


小智 4

DirectComposition 是主要的 api,可用于绘制没有重定向位图的窗口。没有 DirectComposition 的交换链上的 DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 也可能会触发此模式。

使用 api 时需要担心的一件事是,不一定会有不透明的窗口背景,因此 dwm 可以做很多额外的工作,与窗口后面实际上不可见的东西混合

  • 您不是说“......窗户后面的东西**实际上不可见**”吗? (2认同)