Winapi Win32:为什么ReleaseDC()说找不到我的DC?

Winapi Win32:为什么ReleaseDC()说找不到我的DC?,winapi,Winapi,我调用getDC(hwnd),然后在稍后关闭调用ReleaseDC(hwnd,dc)。这是一个OpenGL引擎,在我调用WGLMakeCurrent(Null,Null)和WGLDeleteContext之后 ReleaseDC返回错误代码1425,该代码为1425L error\u DC\u NOT\u FOUND传递给的HDC无效 释放DC 我不明白为什么一个HDC在之前从同一个HWND获得它之后可能是无效的 当我得到它时,我检查了它的指针,它保持不变(这并不是说它有助于检查这样的事情),但

我调用getDC(hwnd),然后在稍后关闭调用ReleaseDC(hwnd,dc)。这是一个OpenGL引擎,在我调用WGLMakeCurrent(Null,Null)和WGLDeleteContext之后

ReleaseDC返回错误代码1425,该代码为1425L error\u DC\u NOT\u FOUND传递给的HDC无效 释放DC

我不明白为什么一个HDC在之前从同一个HWND获得它之后可能是无效的


当我得到它时,我检查了它的指针,它保持不变(这并不是说它有助于检查这样的事情),但我已经没有主意了。

您是否将正确的hwnd作为第一个参数传递给ReleaseDC?另外,您的window类可能需要设置CS_OWNDC类样式。

您确定正确调用了ReleaseDC吗?根据它应该是ReleaseDC(hwnd,dc)

很多OpenGl示例(在我看来)都与设备上下文有着密切的关系。如果您使用的窗口样式类似于
CS_OWNDC
,或者在应用程序的生命周期内缓存HDC,则可能是您过度释放了HDC,或者试图在窗口被破坏后释放它


我没有看到任何论文声称缓存HDC(或使用类似于
CS\u OWNDC
的样式)对OpenGL应用程序的性能很重要或有贡献。此外,在BeginPaint/EndPaint之外,对任何DC进行绘制都会使NT 6.1桌面窗口管理器的工作变得复杂,因此,在初始设置之外,我更喜欢简单地使用
WM_PAINT
消息渲染OpenGL场景,通过WGLMakeCurrent()在相关上下文中切换。它使跟踪HDC变得更容易管理(即,你真的不必这样做),你的应用程序突然可以同时处理多个OpenGL窗口。

调用ReleaseDC时,窗口是否仍然处于活动状态?如果你也发布代码中有问题的部分,那就更好了。我确信我调用它是正确的,只是不确定什么样的东西会锁定或阻止dc释放。我编辑我的帖子是为了坚持我称之为release的方式。好吧,
ReleaseDC(hwnd)
甚至不会编译,所以这肯定是OP问题中的一个打字错误。我同意。。。我在一些示例中看到了这一点(即通过WM_PAINT处理渲染)。我希望我对这件事了解得更多。