如何让OpenGL和GDI同时正常工作?

时间:2016-07-25 06:12:11

标签: c++ windows winapi opengl gdi

我有四个窗口,它们是一个父窗口和三个子窗口。我想让两个子窗口绘制东西。第一个子窗口使用OpenGL,第二个子窗口使用GDI。如果我只是在我的OpenGL窗口上绘制一些内容并且一切正常,但是当我尝试在GDI窗口上绘制(或者只是尝试处理WM_PAINT消息)时,那些子窗口变得很奇怪。首先,我的第三个孩子窗口的某些部分(如按钮,静态,标题栏)将丢失。其次,如果我尝试调整任何窗口的大小,将丢失一个或两个子窗口。但是一旦我点击那些窗口,他们就会回来。第三,PeekMessage不再起作用,它总是返回FALSE,MessageBox似乎无法正常工作(我看不到弹出窗口,但我能听到声音),或者。

刚刚创建了我的第三个孩子窗口。 enter image description here

点击后。 enter image description here

我认为消息处理可能有问题,但我无法弄清楚实际发生了什么。这里有人有什么建议吗?

消息循环:

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来创建我的子窗口,我只是使用CreateWindow来创建我的所有子窗口,我认为它一定有问题,我还需要做些什么来确保那些子窗口工作正常?

1 个答案:

答案 0 :(得分:-2)

必须使用MDI来创建子窗口,请记住,使用MDI !!!!或者会有一些非常奇怪的东西,这些消息没有得到正确处理,MDI将帮助我们做到这一点。