Windows不在OpenGL窗口之上绘图

时间:2009-07-09 09:55:42

标签: c++ windows opengl

我有一个带有OpenGL窗口的应用程序作为主窗口的子窗口。

当我在OpenGL窗口上方显示一个对话框时,它不会被绘制。就好像它没有得到WM_PAINT个消息。如果我可以猜到对话框的标题栏位置,我可以拖动它,它仍然响应。

我意识到这可能是一个模糊的问题,但我想知道是否有其他人之前已经看过这种行为并知道解决方案?

我想知道像素格式描述符是否有所作为 - 我有PFD_DRAW_TO_WINDOW,但更改为PDF_DRAW_TO_BITMAP没有任何区别。我不确定我还应该关注什么?

4 个答案:

答案 0 :(得分:1)

开溜。应该已经给出了所有的细节。我使用Parallels在Mac OS X上的虚拟机中运行Windows。我从Parallels 3升级到4,现在一切正常。我怀疑Parallels视频驱动程序问题。

感谢所有回复建议的人。

答案 1 :(得分:0)

你的opengl窗口是否经常渲染。 3D硬件可能只是渲染成覆盖对话框的覆盖图。如果您将对话框放置在与主窗口重叠的位置,您能看到其中的一些吗?

尝试暂停渲染到主显示屏以查看它是否会影响结果。

您还需要确保您的窗口样式确保剪切结果...

cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN ;

您应该检查本MSDN文章中提到的所有项目,因为它涵盖了在窗口中正确获取opengl呈现的许多基础知识。

http://msdn.microsoft.com/en-us/library/ms970745.aspx

答案 2 :(得分:0)

您可能需要关闭叠加层。它可以通过强制返回缓冲区呈现方法来复制而不是交换。

使用wglChoosePixelFormatARB,其中一个参数应为

WGL_SWAP_METHOD_ARB,其值为WGL_SWAP_COPY_ARB

答案 3 :(得分:0)

这可能看起来很愚蠢,但你确定你的OpenGL窗口没有被标记为“最顶层”吗?

对话框是否也会在窗口边框后面或OpenGL渲染矩形后面消失?