如何让 OpenGL 和 GDI 同时正常工作?
How can I make OpenGL and GDI both working properly at the same time?
我有四个windows,一个parentwindow和三个childwindows。我想制作其中两个 child windows 来画东西。第一个 child window 使用 OpenGL,第二个 child window 使用 GDI。如果我只是在我的 OpenGL window 上绘制一些东西并且一切正常,但是当我尝试在我的 GDI window 上绘制(或只是尝试处理 WM_PAINT 消息)其他东西时,那些childwindows变得怪怪的。首先,我的第三个 child window 的某些部分(如按钮、静态、标题栏)将丢失。其次,如果我尝试调整任何 windows 的大小,一个或两个 child windows 将会丢失。但是一旦我点击那些 windows 他们就会回来。第三,PeekMessage不再工作了,它总是return一个FALSE,MessageBox似乎也不能正常工作(我看不到弹出窗口window,但我能听到声音)。
我的第三个 child window 刚刚创建。
点击后。
我认为消息处理可能有问题,但我无法弄清楚实际发生了什么。这里有人有什么建议吗?
消息循环:
MSG msg;
DWORD dwLast;
DWORD dwCurrent;
DWORD dwInterval = 20;//50 FPS 1000 / 50
dwLast = GetTickCount();
while (1) {
while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == FALSE)
{
dwCurrent = GetTickCount();
if (dwCurrent - dwLast < dwInterval)
continue;
SendMessage(Handle_Child_Demo, WM_PAINT, 0, 0);
dwLast = dwCurrent;
}
if (GetMessage(&msg, NULL, 0, 0) != TRUE) {
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
我没有使用 MDI 来创建我的 child windows,我只是使用 CreateWindow 来创建我所有的 child windows,我认为这一定是什么错了,我还需要做些什么来确保那些 child windows 正常工作?
必须使用 MDI 来创建子 windows,请记住,使用 MDI!!!!或者会有一些非常奇怪的事情,这是因为那些消息没有被正确处理,而MDI会帮助我们做到这一点。
我有四个windows,一个parentwindow和三个childwindows。我想制作其中两个 child windows 来画东西。第一个 child window 使用 OpenGL,第二个 child window 使用 GDI。如果我只是在我的 OpenGL window 上绘制一些东西并且一切正常,但是当我尝试在我的 GDI window 上绘制(或只是尝试处理 WM_PAINT 消息)其他东西时,那些childwindows变得怪怪的。首先,我的第三个 child window 的某些部分(如按钮、静态、标题栏)将丢失。其次,如果我尝试调整任何 windows 的大小,一个或两个 child windows 将会丢失。但是一旦我点击那些 windows 他们就会回来。第三,PeekMessage不再工作了,它总是return一个FALSE,MessageBox似乎也不能正常工作(我看不到弹出窗口window,但我能听到声音)。
我的第三个 child window 刚刚创建。
点击后。
我认为消息处理可能有问题,但我无法弄清楚实际发生了什么。这里有人有什么建议吗?
消息循环:
MSG msg;
DWORD dwLast;
DWORD dwCurrent;
DWORD dwInterval = 20;//50 FPS 1000 / 50
dwLast = GetTickCount();
while (1) {
while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == FALSE)
{
dwCurrent = GetTickCount();
if (dwCurrent - dwLast < dwInterval)
continue;
SendMessage(Handle_Child_Demo, WM_PAINT, 0, 0);
dwLast = dwCurrent;
}
if (GetMessage(&msg, NULL, 0, 0) != TRUE) {
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
我没有使用 MDI 来创建我的 child windows,我只是使用 CreateWindow 来创建我所有的 child windows,我认为这一定是什么错了,我还需要做些什么来确保那些 child windows 正常工作?
必须使用 MDI 来创建子 windows,请记住,使用 MDI!!!!或者会有一些非常奇怪的事情,这是因为那些消息没有被正确处理,而MDI会帮助我们做到这一点。