急! 偶在利用双缓冲方法在一个控件上反复绘制图形时, 达到一定次数时绘制失败,为何?

SGUav 2004-07-29 11:33:12

偶从 CStatic 派生出一个类, 在这个类的 OnPaint() 函数中使用双缓冲的方法进行绘图.但是当反复绘制累计到一定数量时,诸如 LineTo() 一类的函数从显示的效果来看好像失效了,输出的字体也发生变化.偶怀疑是内存泄漏导致,但是使用 BCCheck 检查未发现内存或资源泄漏,为何?

另外,该现象在 XP 下不会发生, 在 98 下时就发生该问题, 为何?


...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwglucky 2004-07-30
  • 打赏
  • 举报
回复
系统dc是不用deletedc的。只需要releasedc.
SGUav 2004-07-29
  • 打赏
  • 举报
回复

感谢楼上各位。

SelectObeject() 分离原先选进设备环境的GDI 对象仔细检查过了,还有 DeleteObject()也做了。在 GDI 对象的使用上应该不会存在什么问题。倒是 holyeagle 提醒了我,最后偶只用了 DeleteDC(),之前没有调用 ReleaseDC(),这样做好像是不行的。等我回去再看一下。
holyeagle 2004-07-29
  • 打赏
  • 举报
回复
创建的GDI资源要deleteobject,
GetDC或者GetsafeDC得到的dc资源也要releaseDC

总之,用完要还的嘛!
名牌大灰狼 2004-07-29
  • 打赏
  • 举报
回复
用了要放的.
dreamy 2004-07-29
  • 打赏
  • 举报
回复
应该是你的程序中GDI资源泄漏了。
Create了dc, font, pen, brush等等资源后,有没有把它们deleteObject?
快乐鹦鹉 2004-07-29
  • 打赏
  • 举报
回复
一般是GDI资源未及时释放造成的。在程序中如果反复申请GDI资源,要记得用完后立刻释放。还有CDC资源也是有限的,每次GetDC后要记得ReleaseDC
FlyYang 2004-07-29
  • 打赏
  • 举报
回复
多半是GDI资源泄漏

比如你调用SelectObject选择新的GDI对象,使用完之后要置回原来的对象,也可以用SelectStockObject(BLACK_BRUSH)等系统内置的

你可以找找有没有类似的错误
------------------------------------
体验速度,体验CSDN新版论坛助手:http://community.csdn.net/Expert/TopicView.asp?id=3108679
dreamy 2004-07-29
  • 打赏
  • 举报
回复
GetDC --> ReleaseDC;
CreateDC --> DeleteDC;
不要对应错了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧