当前位置: 首页 > 知识库问答 >
问题:

如何在Win32(C)静态控件中正确呈现OpenGL?

杨飞飙
2023-03-14

我试图让OpenGL在Win32 api静态控件内部进行渲染。我已经看过内赫的教程了(http://nehe.gamedev.net/tutorial/creating_an_opengl_window_(win32)/13001/)介绍如何强制openGl渲染整个窗口。我知道如何做到这一点,但我不完全确定如何让它在静态控件(或任何控件)内部呈现。目前,我正在尝试这样做:

HDC         hDC = NULL;
HGLRC       hRC = NULL; 
HWND        hWnd = NULL; 
HWND        panel;
HINSTANCE   hInstance;  
void CreatePanelGL(HWND hWnd){
    panel = CreateWindowEx(
    WS_EX_CLIENTEDGE,
    "STATIC",
    "",
    WS_CHILDWINDOW | WS_VISIBLE | CS_OWNDC | CS_VREDRAW | CS_HREDRAW,
    30, 30, 100, 100,
    hWnd,
    (HMENU)BUTTON_ID,
    GetModuleHandle(NULL),
    NULL);

    hDC = GetDC(panel);
    PIXELFORMATDESCRIPTOR pfd = { 0 };
    pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = 32;
    pfd.cDepthBits = 16;
    pfd.cStencilBits = 8;

    SetPixelFormat(hDC, 1, &pfd);
    hRC = wglCreateContext(hDC);
    wglMakeCurrent(hDC, hRC);
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
switch(uMsg){
   case WM_CREATE:{
      CreatePanelGL(hWnd);
      break;
   }}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

我有比这更多的代码,但我认为这是唯一重要的部分。如果你想让我发布更多,请告诉我。回调函数减少了很多,CreatePanelGL()函数是一个完整的复制和粘贴。该代码几乎是Nehe代码的一个经过大量修改的版本。虽然这不会引发任何错误,但openGl不会呈现面板内部的清晰颜色。有人能帮我吗?我肯定我至少做了一百件错事。

共有1个答案

翟志新
2023-03-14

静态控件有自己的绘图操作,可能会把事情搞砸。改为创建一个自定义子窗口。

 类似资料:
  • 我对django静态文件处理有问题。 我对如何使用MEDIA\u ROOT、STATIC\u ROOT、MEDIA\u URL和STATIC\u URL感到困惑 我有这样的文件结构(对不起,我不知道如何正确缩进:S): 例如,如果我有一个。css文件在我的css目录中,如何访问它?

  • 在jasper reports一节中,pdf问题中有一个jasper report字符编码。 jasper报告中无法解决该问题,因为它似乎是一个itext问题(使用itext v.5.5.4) 示例代码: 可在mm3下载字体。ttf公司 将错误渲染为: 它应该呈现为(在浏览器中使用相同的ttf) 只是出于好奇发生了什么事?(看起来像是某些字符,带虚线的圆圈应该向后移动,但这不会发生)。 这是<代码

  • 问题内容: Android库中没有PDF支持。有什么方法可以在Android应用程序中呈现PDF文件吗? 问题答案: 自API Level 21(Lollipop)起,Android提供了PdfRenderer类: 对于较旧的API,我建议使用Android PdfViewer库,该库非常快速且易于使用,并根据Apache License 2.0授权:

  • 问题内容: 我已经尝试了两个类组件: 并使用功能组件: 页面上显示的x值永远不会改变,或者似乎是随机改变的。是什么赋予了? 问题答案: 当您告诉React某些更改时,React仅知道使用其为状态管理提供的功能来重新渲染: 另外,功能组件应该是 纯 组件(没有副作用),因此要更新它们,React会给我们带来麻烦: 因此,您不能只是分配给一个变量并期望React知道:您必须使用它的更新函数,以便它知道

  • 我一直在做一个项目。在项目的一部分中,我需要使用JPanel。Graphics2D对象被传递给框架的模型部分,模型将在该实例中绘制它需要的任何内容。问题是JFrame未正确呈现。它看起来是半白色的阴影和不正确的绘画。它在我的笔记本电脑(索尼Vaio和Windows7)上运行良好,但在我测试的所有其他系统(2台戴尔笔记本电脑、windows8;1台Thoshiba和Windows7;1台三星和win

  • 问题内容: 我正在使用 JSF 2.1.8 实现Web应用程序,而 ui:include 标记存在问题。我有这个代码 该 navigationManagerSystem bean是JSF会话管理,在这一段代码首先呈现的,它应该是显示包括路径内容。如果我以这样的常量执行此操作,则包括这些工作,但是如果我将其放入变量中则不行,即使我已经看到变量在屏幕打印之前就保持了该值。我不知道它是否可以与包含/sy