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

时间:2015-02-22 03:46:36

标签: c++ winapi opengl

我试图让OpenGL在Win32 api静态控件内部渲染。我已经通过了Nehe的教程(http://nehe.gamedev.net/tutorial/creating_an_opengl_window_%28win32%29/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 个答案:

答案 0 :(得分:1)

Static control有自己的绘图操作,可能会搞砸。改为创建一个自定义子窗口。

相关问题