コーディングしているエンジン用に 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 は同じスレッドから呼び出す必要があると書かれていますが、マルチスレッド関数をコーディングしていないので、そうではないと思います。
何が原因でしょうか?