我为我正在编码的引擎创建了一个使用 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 必须从同一个线程调用,但我没有编写任何多线程函数,所以我不认为是这种情况。
这可能是什么原因造成的?