C ++ Win32 GetDC以及何时发布DC

时间:2014-04-08 01:56:30

标签: c++ winapi

在我的程序(游戏)中,我进行了GetDC()调用并将DC保存为全局。我想在程序结束时我可以发布ReleaseDC()。

目前我遇到麻烦,因为有些事情没有正确。我使用具有各种功能的DC和计时器。

这可能导致这个问题吗?

(程序的大小太大,无法改变一切,看它是否会有帮助......)

编辑:

是唯一一个全球保存的(并在创建窗口后设置)
HDC hDC = GetDC(hWnd)

然后,每当我需要做某事时:

HDC hdcMem = CreateCompatibleDC(hDC);
// everything
DeleteDC(hdcMem)

然后在程序结束时:

ReleaseDC(hWnd, hDC);

是否有可能在代码的各个地方进行所有绘图和对象选择会导致这些“半罕见”问题?

另外,忘了注意,任何地方都没有GDI泄漏。

1 个答案:

答案 0 :(得分:5)

你不应该长时间存储HDC。

一般来说,你不需要这样做。当你需要画一些东西时,你可以调用InvalidateRect(HWND, rc),当可能的情况下,操作系统会向你发送WM_PAINT,你可以在那里画画。

简而言之:避免在WM_PAINT之外绘图。