GDI对象的选择与释放

GDI对象通过SelectObject来选择。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中时,如果不将GDI对象从DC中释放,那么当该对象被析构时,其所指向的对象由于被占用很有可能无法释放。所以一定要用到SelectObject将选入的GDI对象选出。我们画图时编辑的函数如下:

CDC dc;//创建一个设备上下文对象dc
CPen myPen;//定义一个GDI (HPEN)对象myPen
myPen.CreatePen(PS_SOLID,3,RGB(255,0,0));//为GDI对象创建具体的属性
CPen *pOldPen =dc.SelectObject(&myPen);//将myPen选入到设备上下文dc中,返回原有对象的指针
dc.MoveTo(xx,xx);
dc.LineTo(xx,xx);
dc.SelectObject(pOldpen);//将就有的对象选入设备上下文dc中,从而释放myPen

如果最后一步dc.SelectObject(pOldpen);没有,那么myPen将一直在设备上下文dc中,此时如果释放myPen,那么析构函数有可能无法正确释放,从而造成资源泄露。

GDI对象的释放是在析构函数中完成的,这个不是重点,重点是我们一定要确保当GDI对象释放时其不能被其他占用。

参考链接:https://blog.csdn.net/benben853/article/details/6585600

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值