MFC 第二章学习笔记

关于GDI对象的删除




首先,C++对象与GDI对象是两个不同的东西,在MFC中,若是由CGdiObject类派生而来的类,则其C++对象中包含了GDI的对象
1、


对于CGdiObject  object其中包含一个函数DelteObject()此函数的功能为删除类对象中相应的GDI对象,比如CPen pen(..) 定议了一个pen对象并初始化, 则此pen对象中,就包含有一个GID的画笔句柄,当你调用pen.DeleteObject()函数时,pen对象中所包含的画笔句柄将会被释放,画笔句柄不再与此CPen对象联系在一起了,所以你可以通过调用pen.CreatePen(...)函数再向系统申请一个GDI画笔句柄,将此句柄与此CPen对象相联系。


若MFC 中,CGdiObject的派生类对象在栈上创建,则当对象消亡时,其析构函数会调用成员函数DeleteObject()来实现GDI对象的释放。若对象在堆上用new创建,则要delete之,以便调用析构函数。


2、


对于CBrush类


若你用obj1=new CBrush(...),obj2=new CBrush(...)创建了两个一模一样的画刷,那么系统为了节约GDI资源只会创建一个GID的画刷句柄,并让此句柄与这两个画刷对象联系在一起。
若你执行如下语句:CBrush preturn; dc.SelectObjec(obj1);preturn= dc.SelectStockObject(WHITE_BRUSH); 你无法确定preturn 的值是obj1,还是obj2.为什么呢?因为,CDC::SelectObjct()用到由MFC维护的表格,把从::SelectObject()返回的HBRUSH转化为CBrush的指针,表格形成HBRUSH与CBrush间的一一映射,所以返回来的指针你没法确定是obj1,还是
obj2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值