如何让 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会帮助我们做到这一点。