我一直在制作一个 C++ 绘图程序,我有一个部分是在一个函数中使用 gdi+ 绘图,所以我每次调用该函数时都需要声明我的图形对象。这显然是错误的,并导致某处泄漏,所以之后正如预期的那样,有些调用会变慢然后突然停止绘制。
我试图在每次完成绘制时清除我的对象,但它似乎无法解决问题。我认为 PEN 对象可能是问题的一部分,但一些见解会非常有帮助 我的代码:
void function()
{
DWORD pdwGduStartup;
GdiplusStartupInput GdiStartupInp;
GdiplusStartup(&pdwGduStartup, &GdiStartupInp, NULL);
Pen pnPen_Blue(Gdiplus::Color(255, 0, 0, 255), 2.0F);
Pen pnPen_Green(Gdiplus::Color(255, 255, 0, 255), 2.0F);
LPCSTR LGameWindow = "MyWindow";
HWND hGameWindow = FindWindow(NULL, LGameWindow);
Graphics graphics(GetDC(hGameWindow));
for (int n=10; n>0; n--)
graphics.DrawLine(&pnPen_Green,0, 0, 0, n);
GdiplusShutdown(pdwGduStartup);
graphics.Flush();
}
非常感谢!
编辑:添加的发布 DC 没有做任何事情!
DWORD pdwGduStartup;
GdiplusStartupInput GdiStartupInp;
GdiplusStartup(&pdwGduStartup, &GdiStartupInp, NULL);
Pen pnPen_Blue(Gdiplus::Color(255, 0, 0, 255), 2.0F);
Pen pnPen_Green(Gdiplus::Color(255, 255, 0, 255), 2.0F);
LPCSTR LGameWindow = "MyWindow";
HWND hGameWindow = FindWindow(NULL, LGameWindow);
HDC GDC = GetDC(hGameWindow);
Graphics graphics(GDC);
ReleaseDC(hGameWindow, GDC);
GdiplusShutdown(pdwGduStartup);
graphics.Flush();
我的 GDI 对象仍然增加到 10,000!
最佳答案
必须在删除所有 GDI+ 对象后调用 GdiplusShutdown。在您的代码中,当对象超出范围时,在 GdiplusShutdown 之后调用 Pen 和 Graphics 析构函数。
关于C++ GDI+ 对象内存泄漏/对象太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31471963/