Win32:为什么ReleaseDC()说我的DC没有找到?

时间:2010-10-15 20:07:26

标签: winapi

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

ReleaseDC返回错误代码1425,即1425L ERROR_DC_NOT_FOUND无效的HDC传递给                                             ReleaseDC。

我不明白以前从同一个HWND获取HDC后HDC是如何无效的。

当我拿到它时我检查了它的指针并且它保持不变(不是它有助于检查这样的事情),但我的想法已经用完了。

3 个答案:

答案 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);