GDI编程需要注意的地方
2012-07-06 23:44
253 查看
写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对象在声明的时候就可以决定是由析构函数来帮你释放,还是由你自己释放,非常方便。
众所周知,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对象在声明的时候就可以决定是由析构函数来帮你释放,还是由你自己释放,非常方便。
相关文章推荐
- GDI编程需要注意的地方(句柄泄漏)
- js 编程风格指南:开发需要注意的地方
- 归并排序+一个编程需要注意的地方
- 进程控制编程预习需要注意的地方
- (很乱)编程需要注意的地方,持续更新中...
- VC++编程需要注意的地方(请大家积极回复)
- 冷启动与热启动在STM32基于RTOS编程中需要注意的地方
- VC++编程需要注意的地方(请大家积极回复)
- 关于jdbc编程的几点需要注意的地方
- Linux Bash编程需要注意的几个地方
- VC++编程需要注意的地方(请大家积极回复)
- vc 编程最需要注意的地方
- c# 事务编程一些需要注意的地方
- ios编程需要注意的地方
- VC++编程需要注意的地方(请大家积极回复)
- 串口编程需要注意的地方
- recvfrom sendto的解释 多线程编程需要注意的地方 全局变量的设置 自定义消息 大杂烩inet_
- VC++编程需要注意的地方(请大家积极回复)
- react native 里有关注释需要注意的地方
- struct位域,对齐以及union作为class需要注意的地方