我有一个用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必须从同一个线程调用,但我不编码任何多线程函数,所以我不认为是这种情况。
导致这种情况的原因是什么?