У меня есть этот цикл сообщений в моей программе:
while (true) {
if (PeekMessage(&msg, window, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
MessageBox(NULL, L"Quit", L"", 0);
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
Render();
}
}
Этот цикл никогда не заканчивается. Он никогда не отображает окно сообщения, даже если главное окно исчезает. Вот код WndProc:
switch (msg) {
case WM_CLOSE :
DestroyWindow(hwnd);
break;
case WM_DESTROY :
PostQuitMessage(0);
break;
default :
return DefWindowProc(hwnd, msg, wParam, lParam);
break;
}
return 0;
Может кто-нибудь, пожалуйста, помогите мне? Я буквально вытягиваю волосы.
Вы вызываете PeekMessage(&msg, window, ...)
. Если window
не NULL
, вы никогда не получите WM_QUIT
, потому что WM_QUIT
не связано с окном.
Вместо этого просто вызовите PeekMessage
/GetMessage
с помощью NULL
HWND
. DispatchMessage
по необходимости направит его WndProc
. (В общем, создание GetMessage
/PeekMessage
фильтра HWND
- плохая идея.)