是否可以在已经使用 GDI+ 的窗口中使用 OpenGL?

Posted

技术标签:

【中文标题】是否可以在已经使用 GDI+ 的窗口中使用 OpenGL?【英文标题】:Is it possible to use OpenGL in a window that is already using GDI+? 【发布时间】:2010-10-27 03:43:56 【问题描述】:

基本上,我被要求渲染到已设置(我不确定如何)使用 GDI+ 的屏幕外 DC。当我尝试将 OpenGL 上下文与 DC 关联时,它只是失败了(即返回零但没有错误)。 SetPixelFormat 也失败了(可能是因为它已经设置好了?),再次返回零,而不是错误。

任何人都知道是否有可能,在这种情况下(即其他人正在使用 GDI+ 的窗口的屏幕外上下文),创建 OpenGL 上下文并使用 OpenGL 进行我自己的渲染? (如果可能,为什么 wglCreateContext 会失败?)

【问题讨论】:

【参考方案1】:

本文向您展示了连接 GDI 窗口的所有步骤:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=01

基本上,您必须:

    创建一个窗口 注册窗口 获取窗口绘图区的设备上下文 为设备上下文设置像素格式 调用 wglCreateContext 调用 wglMakeCurrent 显示窗口

如果您已经可以访问设备上下文,请跳过前两个步骤。

在你的情况下,你可能会看到 wglMakeCurrent 是否是你所需要的。否则,您可能需要发布有关您遇到的错误和行为的更多详细信息。

【讨论】:

问题是我已经有了 DC(它是一个屏幕外设备上下文),指的是我需要绘制的窗口,但是我的 wglCreateContext 失败并且没有任何错误消息,我的也是设置像素格式。我可以毫无问题地创建新的 OpenGL 窗口,但它试图使用应用程序给我的 DC,这就是问题所在...... 你怎么知道它失败了?你得到什么样的错误或代码作为回报?有什么奇怪的行为,或者它只是没有画吗? 无错误代码,来自 OpenGL 或 Windows 系统。不过,我知道它不起作用,因为它返回 0 而不是有效的 HGLRC。

以上是关于是否可以在已经使用 GDI+ 的窗口中使用 OpenGL?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用准确的 GDI 字体大小?

我可以从 WPF 窗口获取 HDC 以便我可以使用 Gdi+ API 绘制它吗?

是否可以使用 WINAPI 或 GDI+ 在 C++ 中创建 CommandLink 对话框?

如何使用 GDI 将 RGB 位图绘制到窗口?

使用 gdi 在 winapi 窗口中的运行时更新颜色

GDI 已经加速。这是啥时候发生的?