我有一个可以改变大小的对话框。它还有一个自定义背景,我通过响应WM_ERASEBKGND调用来绘制(目前是一个简单的FillSolidRect调用)。
当对话框被调整大小时,会出现大量闪烁。为了试图减少闪烁,我枚举所有子窗口并将它们添加到剪辑区域中。这似乎有所帮助——现在闪烁主要出现在所有子控件重绘时。
如何使对话框在调整大小时不闪烁?我怀疑双缓冲必须发挥作用,但我不确定如何在具有子控件的对话框中实现双缓冲(而无需使所有子控件进行所有者绘制或类似操作)。
我应该注意到,我正在使用C++(而不是.NET),以及MFC,尽管纯Win32解决方案也是可以的 :)
注意:我尝试过的一件事,但不起作用(不知道为什么),是:
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.FillSolidRect(rect, backgroundColor);
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);