我调用getDC(hwnd),然后调用CloseDC(hwnd,dc)。这是一个OpenGL引擎,在我调用WGLMakeCurrent(Null,Null)和WGLDeleteContext之后。
ReleaseDC返回错误代码1425,即1425L ERROR_DC_NOT_FOUND无效的HDC传递给 ReleaseDC。
我不明白以前从同一个HWND获取HDC后HDC是如何无效的。
当我拿到它时我检查了它的指针并且它保持不变(不是它有助于检查这样的事情),但我的想法已经用完了。
答案 0 :(得分:2)
很多OpenGl样本确实(在我看来)用设备上下文来处理事情。如果您使用的窗口的样式为CS_OWNDC
,或者在应用程序的生命周期内缓存HDC,则可能是您已经过度释放HDC,或者在窗口被破坏后尝试释放它。
我没有看到任何声称缓存HDC(或使用像CS_OWNDC
这样的样式)的论文对OpenGL应用程序的性能很重要或有贡献。此外,绘制到BeginPaint / EndPaint外部的任何DC使得NT 6.1桌面窗口管理器的生活变得复杂,因此,在初始设置之外,我更喜欢简单地使用WM_PAINT
消息来呈现OpenGL场景,切换到通过WGLMakeCurrent()的相关上下文。它使跟踪HDC更易于管理(即你真的不需要),你的应用程序突然可以同时处理多个OpenGL窗口。
答案 1 :(得分:0)
您是否将正确的hwnd作为第一个参数传递给ReleaseDC?此外,您的窗口类可能需要设置CS_OWNDC类样式。
答案 2 :(得分:0)
您确定要正确调用ReleaseDC吗?根据{{3}},它应该是ReleaseDC(hwnd,dc);