在windows系列上做编程,gdi是一个很重要的技术点,有很多程序在运行多次后出现异常,除了众所周知的内存泄露以外,gdi资源泄露也是一个很直接的原因.今天就把我自己在编程中总结的一些经验给大家分享,欢迎高手补充. 1.Create出来的gdi对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放. 假如我们要使用gdi函数画图,正确的步骤应该如下: a.创建一个内存兼容dc(CreateCompatibleDC) 由于SelectObject在选入一个新的gdi对象的时候会返回一个原来的gdi对象(假如成功的话),所以需要在步骤c的时候保存返回值,在步骤f 的时候当作入口参数使用.还有,步骤g和步骤h实际上顺序可以随意,因为他们两个此刻已经没有关系了,但是为了结构清晰,我建议按照"先Create的后释放,后Create的先释放"的原则进行. 对于CPen 来说,因为是CGdiObject的派生类,在析构函数中调用了DeleteObject()函数,所以不需要显式释放,CBrush 同理。但是如果CPen这里调用的是不带参数的构造函数的话,比如 CPen PenYellow; 这样的话后面必须还要调用CreatePen等函数来对CPen进行初始化工作,此时是需要显式释放的,即手动调用PenYellow.DeleteObject(); (weiqubo) |