0

プログラムに次のメッセージループがあります。

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;

誰か助けてくれませんか?私は文字通り髪を抜いています。

4

1 に答える 1

9

あなたは呼んでいPeekMessage(&msg, window, ...)ます。そうwindowでない場合は、ウィンドウに関連付けられていないため、NULLを取得することはできません。WM_QUITWM_QUIT

PeekMessage代わりに、 /GetMessageを。で呼び出すだけNULL HWNDです。DispatchMessage必要に応じて右側に送信しますWndProc。(一般的に、作成GetMessage/PeekMessageフィルタリングHWNDはお勧めできません。

于 2012-05-18T19:51:28.390 に答える