DrawFrameControl 中的 GDI 资源泄漏

Posted

技术标签:

【中文标题】DrawFrameControl 中的 GDI 资源泄漏【英文标题】:GDI resource leak in DrawFrameControl 【发布时间】:2010-09-16 05:58:46 【问题描述】:

似乎 DrawFrameControl() 创建了 Font 和 Brush 对象,将它们选择到 dc 中,并且没有删除它们。 (根据 BoundsChecker 消息)。有人遇到过这种情况吗?

【问题讨论】:

【参考方案1】:

我在各种 OS/CRT Dll 中都经历过同样的事情。 其中一种模式是

我获得了窗口的 DC(GetDC 或 GetWindowDC),以便执行我喜欢的任何操作(即创建兼容的内存 DC)。 我在完成 DC 后释放它,即使我没有在其中选择任何 GDI 对象,有时我也会收到 Boundschecher 警告,指出设备上下文中仍有选定的对象。

由于这些警告绝对不在我的代码中,因此我建议对它们持保留态度。 通常我所做的是清除所有引用我的代码的 BC 警告。

题外话:BC 会抛出许多开发人员无法在其代码中修复的警告。在 stl 中,您将收到无数警告,但其中大多数是“比较不相关的指针”。这并不意味着 BC 错误地扔了它们。在常规应用程序中“比较不相关的指针”可能是一场灾难,但我认为编写 stl 实现的人知道他们在做什么,并且可能已经检查过这些案例。

【讨论】:

不幸的是,在我的情况下肯定存在泄漏,因为 GDI 对象的数量在几秒钟内增加到数千,然后 GDI 崩溃。

以上是关于DrawFrameControl 中的 GDI 资源泄漏的主要内容,如果未能解决你的问题,请参考以下文章

GDI+学习笔记--未完待续

如何绘制没有3d框架的复选框

GDI 和 GDI+ 中的多边形填充模式

C++ 中的 GDI+ 双缓冲

C++ gdi::Bitmap 到内存中的 PNG 图像

C++ gdi::Bitmap 到内存中的 PNG 图像