如何在纯C ++中有效和快速地清理我的GDI对象 - winapi(不是.net,c#)?

时间:2017-10-19 14:35:05

标签: c++ winapi visual-c++ memory-leaks gdi

我正在用纯C ++编写一个程序 - winapi(不是.net,c#)。该程序有很多HWND个对象,如按钮,checkautobox,图标(LoadImage()),编辑和标签控件等。它们的总数约为300,其中大部分是全局定义的,还有一个很多字符串对象。

我从任务管理器检查GDI对象编号,它在开始时显示1865,并且在程序中多次切换我的不同选项卡控件后它快速达到10,000,因此导致GDI泄漏。程序糟透了灰色。

现在,我该如何解决这个问题?我是否应该为每个图标使用DestroyIcon(icon),还要DeleteObject(hwnditem)函数删除每个对象的创建或使用后(所有对象都在WM_CREATE块中创建)?这个动作会减少我的GDI对象数量并且不会导致GDI泄漏吗?有没有快速的方法来处理这个问题?这里用GDIView程序给出的GDI对象编号屏幕图像。

Image is Here

1 个答案:

答案 0 :(得分:0)

我通过在绘图的适当位置添加DeleteObject(x)DestroyIcon(y)方法以及添加图标代码块来解决我的问题。现在,GDI对象的数量几乎是稳定的,而不是增加。