我正在用纯C ++编写一个程序 - winapi(不是.net,c#)。该程序有很多HWND
个对象,如按钮,checkautobox,图标(LoadImage()
),编辑和标签控件等。它们的总数约为300,其中大部分是全局定义的,还有一个很多字符串对象。
我从任务管理器检查GDI对象编号,它在开始时显示1865,并且在程序中多次切换我的不同选项卡控件后它快速达到10,000,因此导致GDI泄漏。程序糟透了灰色。
现在,我该如何解决这个问题?我是否应该为每个图标使用DestroyIcon(icon)
,还要DeleteObject(hwnditem)
函数删除每个对象的创建或使用后(所有对象都在WM_CREATE
块中创建)?这个动作会减少我的GDI对象数量并且不会导致GDI泄漏吗?有没有快速的方法来处理这个问题?这里用GDIView程序给出的GDI对象编号屏幕图像。
答案 0 :(得分:0)
我通过在绘图的适当位置添加DeleteObject(x)
和DestroyIcon(y)
方法以及添加图标代码块来解决我的问题。现在,GDI对象的数量几乎是稳定的,而不是增加。