我有四个窗口,它们是一个父窗口和三个子窗口。我想让两个子窗口绘制东西。第一个子窗口使用OpenGL,第二个子窗口使用GDI。如果我只是在我的OpenGL窗口上绘制一些内容并且一切正常,但是当我尝试在GDI窗口上绘制(或者只是尝试处理WM_PAINT消息)时,那些子窗口变得很奇怪。首先,我的第三个孩子窗口的某些部分(如按钮,静态,标题栏)将丢失。其次,如果我尝试调整任何窗口的大小,将丢失一个或两个子窗口。但是一旦我点击那些窗口,他们就会回来。第三,PeekMessage不再起作用,它总是返回FALSE,MessageBox似乎无法正常工作(我看不到弹出窗口,但我能听到声音),或者。
我认为消息处理可能有问题,但我无法弄清楚实际发生了什么。这里有人有什么建议吗?
消息循环:
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来创建我的所有子窗口,我认为它一定有问题,我还需要做些什么来确保那些子窗口工作正常?
答案 0 :(得分:-2)
必须使用MDI来创建子窗口,请记住,使用MDI !!!!或者会有一些非常奇怪的东西,这些消息没有得到正确处理,MDI将帮助我们做到这一点。