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)/2代码>StartPengl和StopOpenGL在问题链接中(不要担心,我会在工作中提到这些源代码,也会帮助我找到它们!)。对不起,我是个新手。非常感谢。另外,它应该是chwnd=CreateWindow(ChildNAME…
而不是chwnd=CreateWindow(MainNAME…
好的,我终于找到了:)我已经在孩子的WM_-PAINT
方法中加入了我的startopenGL
函数。还添加了一些标志,这样场景就可以按需渲染了。谢谢您的时间:)