GDI编程需要注意的地方(句柄泄漏)

写GDI的时候,我们经常会由于粗心大意,忘记释放GDI资源,导致GDI句柄泄露。再加上如果单元测试做的不好,就会在产品发布以后发生问题。

众所周知,Windows上对于一个进程允许的最大GDI句柄数量为9999,如果程序有大量的GDI句柄没有被及时回收,那么程序就会表现的不正常。如果这种问题发生在以前的WINDOWS 98年代,甚至会造成系统崩溃。


所以,这里我将陆续记录一些GDI编程需要注意的地方,作为今后单元测试中的一部分来进行:

1、Create()必须Delete(),包括CreateCompatibleDC

2、SelectObject()必须是成对出现

3、"H"打头的一些GDI句柄,在使用完后要及时释放。如::DeleteObject(HBITMAP),::DeleteDC(HDC)等

4、记住一个原则:自己创建的东西要自己释放,如GetDC 要 ReleaseDC

5、MFC的GDI有很多问题,使用的时候要非常小心。建议最好直接用SDK写。使用WTL中的GDI也是一个不错的选择。WTL中有些GDI对象在声明的时候就可以决定是由析构函数来帮你释放,还是由你自己释放,非常方便。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值