1

コーディングしているエンジン用に CS_OWNDC スタイルで作成された単一のウィンドウがあり、適切に表示されていますが、プログラムを閉じて ReleaseDC(hWnd, hDC) を呼び出すと、関数は常に 0 を返します (MSDN によると)リリースできなかったということです)。DestroyWindow(hWnd) も 0 を返しています。

ウィンドウの作成中に GetDC(hWnd) を呼び出しています。

奇妙なのは、内部に何もコーディングされていない場合でも、メッセージング機能を通過した場合にのみこのエラーが発生することです。

私の主なコードは次のようになります。

WindowManager windowManager;
HWND mainWindow = windowManager.Initialize("Title", "ClassName", 1024, 768, 32, WindowProc);

MSG msg;
while(true)
{
    if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
    {
        if(msg.message == WM_QUIT) { break; }
        else
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
}
windowManager.Clear(); //this calls ReleaseDC(hWnd, DC) and DestroyWindow(hWnd) among other release codes

私が理解していないのは、whileループ全体にコメントすると、ウィンドウの解放または破棄のエラーが発生しないということです。GetLastError()を呼び出すと、0 も返されます。MSDN では、DestroyWindow は同じスレッドから呼び出す必要があると書かれていますが、マルチスレッド関数をコーディングしていないので、そうではないと思います。

何が原因でしょうか?

4

0 に答える 0