关注微信公众号“二进制小站”~~获取更多分析~~(文末二维码~~)
文章转自:http://blog.csdn.net/fion45/article/details/9967753
GDI对象是否泄漏,可通过在系统“任务管理器”的进程中查看GDI对象是否随操作或程序的运行持续增加(不能减少到原来的个数),如果是,那么可以判定为GDI对象的泄漏。
GDI对象申请后,需要进行释放。GDI对象产生于销毁的方法如下表:
GDI对象
产生方法
销毁方法
位图(HBITMAP)
CreateBitmap,CreateBitmapIndirect,
CreateCompatibleBitmap,CreateDIBitmap,
CreateDIBSection,CreateDiscardableBitmap
DeleteObject
画刷(HBRUSH)
CreateBrushIndirect,CreateDIBPatternBrush,
CreateDIBPatternBrushPt,CreateHatchBrush,
CreatePatternBrush,CreateSolidBrush
DeleteObject
设备上下文(HDC)
CreateDC
DeleteDC,ReleaseDC
字体(HFONT)
CreateFont,CreateFontIndirect
DeleteObject
内存DC(HDC)
CreateCompatibleDC
DeleteDC
调色板(HPALETTE)
CreatePalette
DeleteObject
画笔(HPEN)
CreatePen,CreatePenIndirect
DeleteObject
区域(HRGN)
CombineRgn,CreateEllipticRgn,
CreateEllipticRgnIndirect,CreatePolygonRgn,
CreatePolyPolygonRgn,CreateRectRgn,
CreateRectRgnIndirect,CreateRoundRectRgn,
DeleteObject
这里还有一个问题需要注意,就是设备DC需要调用SelectObject方法来选取不同的GDI对象,当选择GDI对象时必须用一个指针记录替换出来的对象,当要结束绘图的时候再用该DC调用SelectObject方法把替换出来的对象放回去,这时调用以上的销毁方法才能成功,要不也是不能清除GDI对象的,切记。
(参照了网上:http://lmx18.blog.163.com/blog/static/43493679201166115036889/)