我已经在谷歌上搜索了好几天,我得到的都是相同的答案,但这不是我想要的(我稍后会描述我不想要的)。
我想要的是:
问题:
双缓冲不起作用,因为 parent 和 child 有自己的绘画程序,所以我认为不可能共享同一个缓冲区。我读过 WS_EX_COMPOSITE 或适用于 Vista 的东西,但我使用的是低端操作系统。
我不需要的:
有什么想法吗,伙计们?我确信处理速度起到了一定的作用,但我坚信这只是一种技术或设置,我做得不对。我记得我的第一台 PC 是 133MHz,但我不记得 Windows 95 在其父级失去焦点时逐个更新控件——它们几乎立即更新。那时我什至没有好的视频卡。
请帮忙。
补充:
- 我尝试将控件的 BkMode 设置为透明,甚至使用 NULL_BRUSH。所有这些与 ON_WM_CTLCOLOR 一起。我得到的只是一个带有孔的对话框,在这些孔中是控制文本。换句话说,控件的背景并没有被绘制(正如 NULL_BRUSH 所预期的那样),但该区域也没有被对话框的绘制作业覆盖。
- 我正在考虑删除 WS_CLIPCHILDREN,但我相信无论如何都会导致控件被绘制,所以,再次闪烁。
最佳答案
你试过 SetRedraw() 吗?您可以为子窗口调用 SetRedraw(FALSE),这样它们就不会在您每次更改父窗口时自行更新,并且当父编辑完成时,您最终可以为子窗口调用 SetRedraw(TRUE) - 并且可能在那时无效,因此它们会自行更新只有一次。
关于MFC:如何避免子控件更新闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7714034/