看来我的问题可能与未回答的相关问题相同(Windows 7 上出现 GLUT 的 OpenGL,全屏模式不显示消息框 https://stackoverflow.com/questions/1842312/opengl-with-glut-on-windows-7-fullscreen-mode-not-showing-the-message-box).
自从我改用 Win7 作为开发环境以及我的应用程序的可能目标平台后,我注意到它们的行为出现了退化。
每当我有一个包含全屏 OpenGL 上下文的全屏窗口时,应用程序就会出现显示模式对话框(例如消息框、文件打开对话框等)的问题。
该窗口刚刚使用 WS_POPUP 样式创建。 GL 上下文并不奇怪。 Windows XP 一切正常。
Windows 7 下的问题是模式对话框在打开时不可见(可能它们出现在全屏窗口后面)。您必须按 Alt-Tab 键应用程序才能显示对话框。
这是一个主要问题,因为应用程序似乎被冻结,而实际上它正在等待用户输入。
有人遇到过这种行为吗?有谁知道解决方法?
我很快就制作了一个示例测试应用程序;它的源代码可以在以下位置找到http://pastebin.com/K4v2NNDs http://pastebin.com/K4v2NNDs。可以找到一个简单的MSVC8项目here http://code.google.com/p/rotoglup-scratchpad/source/browse/#svn/trunk/misc/windows7_fullscreen_modal_dialog_pb.
附言。我还在 opengl.org 论坛上发过帖子,对关注这两个论坛的人表示歉意。
EDIT
感谢 Chris 的评论,我已经测试了各种事件的模式对话框,例如 WM_TIMER 或 WM_RBUTTONUP,但问题仍然存在。
我还用“DWM_EC_DISABLECOMPOSITION”调用“DwmEnableComposition”只是为了检查:问题仍然存在。
我还通过用 DirectX 替换 OpenGL 位来测试应用程序,这样一切都会按预期工作......这确实是 OpenGL 导致了问题。
(更新了pastebinhttp://pastebin.com/Rq1Ehm3w http://pastebin.com/Rq1Ehm3w和我的便签本)
EDIT
Windows 8 上也存在该问题。