在Windows对话框中处理WM_ERASEBKGND时如何避免闪烁

我有一个调整大小的对话框.它还有一个自定义背景,我为了响应WM_ERASEBKGND调用(目前是一个简单的FillSolidRect调用)来绘制.

当对话框调整大小时,会发生巨大的闪烁.要尝试减少闪烁,我列举所有子窗口,并将它们添加到剪辑区域.这似乎有一点帮助 – 现在所有的孩子控制器中的闪烁显示在他们重画的时候.

调整大小时如何使对话框无闪烁?我怀疑双缓冲必须发挥作用,但我不知道如何使用带有子控件的对话框(不使所有子控件所有者绘制或类似于此).

我应该注意到,我使用C(而不是.NET)和MFC,虽然纯粹基于Win32的解决方案是受欢迎的:)

注意:有一件事我试过但没有工作(不知道为什么)是:

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.FillSolidRect(rect,backgroundColor);

pDC->BitBlt(0,rect.Width(),rect.Height(),&memDC,SRCcopY);
假设“FillSolidRect”是您的背景的擦除,然后从WM_ERASEBKGND返回TRUE.

要执行您几乎在代码片段中执行的双重缓冲,您将需要使用CreateCompatibleBitmap并将其选择到您的memDC中.

相关文章

Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...
Windows文件操作基础代码 Windows下对文件进行操作使用的一段...
Winpcap基础代码 使用Winpcap进行网络数据的截获和发送都需要...
使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看...