【问题标题】:Render with OpenGL to part of Win32 Window使用 OpenGL 渲染到 Win32 窗口的一部分
【发布时间】:2019-07-15 12:40:39
【问题描述】:

我有一个常规的 Win32 窗口,我想只使用 OpenGL 渲染该窗口的一部分,我发现了这个问题:

Using OpenGL in a regular window (Win32)

但我真的不知道他们是如何在窗口内创建一个面板并获得 DC 的..

基本上我想要一个窗口,它可以使用 win32 绘制按钮、列表和更多内容,并在同一窗口的某些指定部分中呈现 opengl 内容。

我尝试使用 glScissor 并清除缓冲区,但这只会用黑色填充整个屏幕,而我指定的部分是清晰的颜色..

我也尝试过使用 glViewport,但没有任何效果。

【问题讨论】:

  • 问题是否归结为:“如何在 WinAPI 中创建控件?”如果是这样,this tutorial 提供了一个很好的概述。但我强烈建议不要直接使用 WinAPI,因为它的工作量非常大。最好使用抽象的 UI 框架。

标签: c++ winapi opengl


【解决方案1】:

我最终像这样创建了一个新的小部件:

HWND OpenglHWND = CreateWindowW(L"Static", L"",
                  WS_CHILD | WS_VISIBLE | WS_BORDER,
                  200, 10, 300, 300, ParentWindowHandle, 0, 0, NULL);

之后,您获得了您创建的面板的HWND,从这里开始像往常一样初始化 OpenGL,但是,在创建上下文时,使用我们之前获得的 HWND 的 DC! (基本上使用 GetDC(OpenGLHWND) 作为 OpenGL 上下文)

【讨论】:

    【解决方案2】:

    您需要创建一个 WinForms Panel 控件(假设您使用的是 WinForms?)然后调用 GetDC(panel.Handle) 并将面板的 Handle 属性作为参数传递。这将为您提供创建 OpenGL 上下文的 DC。

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2018-07-08
      • 2020-08-03
      • 2018-10-08
      • 2022-01-06
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多