Winapi:OpenGL无法在子窗口中呈现

时间:2013-08-13 07:55:23

标签: winapi opengl window rendering parent-child

我无法在我主窗口的子窗口下渲染场景。 我有两个注册窗口:

mainwindow = CreateWindow(bgwinNAME,     
                    TEXT("Benchmark"),
                    WS_OVERLAPPEDWINDOW,   
                    CW_USEDEFAULT,     
                    CW_USEDEFAULT,     
                    CW_USEDEFAULT,     
                    CW_USEDEFAULT,     
                    NULL,              
                    NULL,              
                    hInstance,         
                    NULL);             

ShowWindow(mhwnd, SW_MAXIMIZE);
UpdateWindow(mainwindow);

childwindow = CreateWindow(benchwinNAME,       
                    NULL,
                    WS_CHILD, 
                    (GetSystemMetrics(SM_CXSCREEN)-width)/2,     
                    (GetSystemMetrics(SM_CYSCREEN)-hight)/2,     
                    width,       
                    hight,       
                    mainwindow,              
                    NULL,              
                    hInstance,         
                    NULL);             

UpdateWindow(childwindow);

(稍后会显示子窗口)

我的循环看起来像:

while(TRUE)
{
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
}
if(msg.message == WM_QUIT)
break;

StartOpenGL(childwindow, &hdc, &hrc );
   // .... my GL functions
SwapBuffers(hdc);
}
StopOpenGL(childwindow, hdc, hrc );
return msg.wParam;  
}

childwindowStartOpenGL();中被设置为hwnd时,没有任何反应我只能在窗口类(hbrBackground)中看到一个带有白色bg的窗口。当hwnd设置为mainwindow时,场景呈现在SW_MAXIMIZE范围内。

我的StartOpenGL& StopOpenGL函数来自: Link

1 个答案:

答案 0 :(得分:1)

请停止使用启动/停止OpenGL功能。 StartOpenGL设置窗口PIXELFORMATDESCRIPTOR(PFD),只能执行一次。您最好在创建窗口后立即执行此操作。如果你的两个窗口共享一个兼容的PFD(如果在设置父项的PFD之后创建子窗口就是这种情况;你仍然需要为孩子设置非常相同的 PFD) ,您只需使用wglMakeCurrent在两个窗口之间切换单个OpenGL上下文,由其HDC识别。