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