启用桌面合成后是否仍需要双缓冲?
在 Microsoft 的应用程序兼容性指南中:
图形设备接口 (GDI)
在 Windows Vista 和 Windows Server 2008 之前,窗口句柄 (HWND) 直接绘制到屏幕上,这有一定的好处,但限制了 Windows 显示和管理顶级窗口的方式。在 Windows Vista 和 Windows Server 2008 中,所有顶级窗口都被渲染为离屏位图(类似于 WS_EX_LAYERED),桌面窗口管理器将图像组合在一起以绘制桌面。
听起来现在所有的渲染都是在离屏位图上完成的:
窗口被渲染为离屏位图
它是否正确?
我问的原因是因为我在标准油漆周期中仍然看到闪烁:
- WM_ERASEBKGND
- WM_PAINT
启用桌面合成时:
我会假设在调用之间
BeginPaint(hWnd, paintStructure);
...
EndPaint(hWnd, paintStructure);
所有的绘画都会发生在后台缓冲区:
窗口被渲染为离屏位图
同时,前缓冲区将不受影响。