Winapi:openglcan';无法在子窗口中渲染

Winapi:openglcan';无法在子窗口中渲染,winapi,opengl,window,rendering,parent-child,Winapi,Opengl,Window,Rendering,Parent Child,我无法在主窗口中的子窗口下渲染场景。 我有两个注册窗口: mainwindow = CreateWindow(bgwinNAME, TEXT("Benchmark"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,

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

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);
(稍后将显示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;  
}
StartOpenGL()中将
childwindow
设置为hwnd时没有反应,我只能看到窗口类(hbrBackground)中定义了白色背景的窗口。当hwnd设置为
main window
时,场景在其中的渲染范围为
SW\u MAXIMIZE

我的StartPengl和StopOpenGL函数来自:
请停止使用启动/停止OpenGL函数。StartPengl设置只能执行一次的windows像素格式描述符(PFD)。您最多只能在创建窗口后立即执行此操作。如果您的两个窗口共享一个兼容的PFD(如果您在设置了父窗口的PFD之后创建子窗口,那么您仍然需要为子窗口设置完全相同的PFD),您只需使用
wglMakeCurrent
在两个窗口之间切换一个OpenGL上下文,由它们的HDC标识。

谢谢。我这样做了(也使用了
wglMakeCurrent
),但仍然一无所获。我注意到我在
childwindow
场景渲染中将HWND设置为NULL,但在
SW\u最大化
上。我会继续查找。@user2674257:我需要查看您的完整代码,以便就软件问题提出有用的建议。然而,仅使用纯Win32 API创建OpenGL上下文并不困难;事实上,大约17年前,当我学习OpenGL时,我在使用一个现有的简单OpenGL框架(GLUT)时经常遇到障碍。因此,在经历了一个令人沮丧的下午之后,我很快就入侵了我的oen Win32 API OpenGL框架,这是我使用了很长时间的框架。别担心它是安全的,我在文件上设置了密码,这样它就可以通过反剽窃系统(这是为了学习)。如果您能检查一下,我将不胜感激。我没有包括opengl代码和
intwidth
inthight
是:
intwidth=GetSystemMetrics(SM\u CXSCREEN)/2
inthight=GetSystemMetrics(SM\u CYSCREEN)/2StartPengl和StopOpenGL在问题链接中(不要担心,我会在工作中提到这些源代码,也会帮助我找到它们!)。对不起,我是个新手。非常感谢。另外,它应该是
chwnd=CreateWindow(ChildNAME…
而不是
chwnd=CreateWindow(MainNAME…
好的,我终于找到了:)我已经在孩子的
WM_-PAINT
方法中加入了我的
startopenGL
函数。还添加了一些标志,这样场景就可以按需渲染了。谢谢您的时间:)