当我在任务管理器中查看我的进程的 GDI 对象数量时,我看到并非每次调用 GDI 对象的函数 DeleteObject() 都会导致该数字递减,并且函数调用不会返回 FALSE(因为它应该如果对象删除不成功)。我使用的是普通的 Windows API GDI 函数,没有额外的库和包装器,例如 MFC。为什么会发生这种情况,是否意味着 GDI 资源泄漏?
这是如何重新创建问题的代码:
void gditest()
{
HBRUSH h = CreateSolidBrush(RGB(255, 237, 5));
HRGN rgn = CreateRectRgn(0, 100, 100, 0);
FillRgn(g_DC, rgn, h);
int before = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
int rs = DeleteObject( h );
if ( !rs )
throw;
int after = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
}
变量“之前”和“之后”是相等的。g_DC 是主窗口的 HDC。