我一直在谷歌上搜索,我得到的只是相同的答案,但不是我想要的(我会描述我以后不想要的)。
我想要的是:
问题:
双缓冲不起作用,因为父和子拥有它自己的绘图例程,所以我认为共享相同的缓冲区是不可能的。我已经读过WS_EX_COMPOSITE或适用于Vista的东西,但我是在低端操作系统上。
我不需要的内容:
任何想法,伙计们?我确信处理速度是其中的一部分,但我坚信这只是一种技巧或设置,我做得不对。我记得我的第一台PC是133MHz,但我不记得Windows 95在父母失去焦点的情况下逐个更新控件 - 他们几乎立即更新。那时我甚至没有一张好的视频卡。
请帮忙。
加法: - 我尝试将控件的BkMode设置为TRANSPARENT,甚至使用NULL_BRUSH。所有这些与ON_WM_CTLCOLOR一起。我得到的只是一个带孔的对话框,在那些洞中是控制文本。换句话说,不是绘制控件的背景而是绘制(如NULL_BRUSH所预期的那样),但对话框的绘制作业也没有覆盖该区域。 - 我正在考虑删除WS_CLIPCHILDREN,但我相信无论如何都会导致控件被覆盖,所以,再次闪烁。
答案 0 :(得分:1)
你尝试过SetRedraw()吗?您可以为子窗口调用SetRedraw(FALSE),这样每次更改父级时它们都不会自动更新,当父编辑完成后,您最终可以为子级调用SetRedraw(TRUE) - 并且可能在此时无效以便它们自行更新只有一次。
答案 1 :(得分:0)
您是否尝试覆盖WM_CTLCOLOR
?查看my answer to this post
注意:您可以使用pDC->SetBkColor
设置静态控件的背景颜色,并返回所需颜色的画笔。
答案 2 :(得分:0)
我之前通过覆盖对话框的擦除背景来完成此操作。然后,不是调用默认函数,而是准备区域,遍历对话框的所有子项并从区域中剪切出它们的边界。最后,使用对话框背景颜色填充矩形。
基本上,这个想法只是在没有控件的地方擦除。
这会,但我不确定是否有更好的方法来做到这一点。就像'剪辑儿童'选项一样,或者我相信有双重缓冲的风格。