我有一个带有三个MDI窗口的应用程序,它们都显示OpenGL内容。在XP上,一切正常。但是在Vista / Win7上,mdi子窗口无法正常刷新。
启动后,所有窗口都会正确显示其内容。但是当我将焦点从一个mdi窗口更改为下一个窗口时,这两个窗口被清除(即,它们只显示白色,没有内容)。我不知道为什么窗户被清除,当发生这种情况时它们没有收到任何WM_ *消息,当然也没有收到WM_PAINT消息。
当调整这些窗口的大小时,我正确地获取WM_PAINT消息(在WM_SIZE之后)并重绘内容,但是窗口也被清除,这会在调整大小时导致奇怪的闪烁。调整大小停止后,窗口保持清除(白色),直到我手动强制刷新。
这与Aero启用或禁用无关。
知道为什么会这样吗?
答案 0 :(得分:2)
我很惊讶它适用于XP。在我使用OpenGL的(有限)经验中,WM_PAINT并不总是重绘OpenGL场景的最佳位置。很可能内容在驱动程序级别被消除。您可以通过查看当您的某个MDI窗口恰好跨越连接到两个不同视频卡的两个显示器时发生的情况来检查这一点。
尝试以下方法:
可能适用的其他罕见干扰原因(因为您使用的是MDI窗口)