Forich
探索未知
C++博客
首页
新随笔
联系
聚合
管理
随笔-14 评论-8 文章-0 trackbacks-0
【读书笔记】GDI对象 的跟踪与删除
一直都不怎么注意 function 的返回类型,今天看到删除GDI对象一文时,对保存旧GDI对象的代码颇为不解,遂查之,无果。重读之,恍然大悟!
先看看代码:
1
void
CMyView::OnDraw(CDC
*
pDC)
2
{
3
CPen newPen(PS_DASHDOTDOT,
2
, (COLOREF)
0
);
//
2个像素宽的黑色Pen。
4
CPen
*
pOldPen
=
pDC
->
SelectObject(
&
newPen);
//
SelectObject返回的是上一个被选对象的指针,而不是当前的 &newPen。
5
pDC
->
MoveTo(
10
,
10
);
6
pDC
->
Lineto(
110
,
10
);
7
pDC
->
SelectObject(pOldPen);
//
newPen 落选
8
}
9
如第四行所示,原来SelectObject返回的是上一个被选对象的指针。当 newPen 落选之后,也就从设备环境中分离了,function 退出后,它就被自动销毁了。
既然落选之后就可以被自动删除,那么选择其它GDI对象也能删除自己创建的GDI对象。为了不造成内存的浪费,我们可以选择库存的GDI对象,由于它们是系统的一部分,所以不用担心它们会造成浪费:
1
void
CMyView::OnDraw(CDC
*
pDC)
2
{
3
CPen newPen(PS_DASHDOTDOT,
2
, (COLOREF)
0
);
//
2个像素宽的黑色Pen。
4
pDC
->
SelectObject(
&
newPen);
5
pDC
->
MoveTo(
10
,
10
);
6
pDC
->
Lineto(
110
,
10
);
7
pDC
->
SelectStockObject(BLACK_PEN);
//
newPen 落选
8
}
9
//
function 退出,newPen 被销毁。
posted on 2008-10-16 13:11
崇文
阅读(598)
评论(1)
编辑
收藏
引用
评论:
#
re: 【读书笔记】GDI对象 的跟踪与删除
2016-04-22 15:45 |
崇文
2016年4月22日:回头看自己写的东西,有趣,尴尬。
newPen之所以被销毁,是因为被CPen这个类包装了,CPen的析构函数应该做了这个事,当然,手动解除newPen的占用是必要的。
说明当年我对c++的构造、析构等函数只有肤浅的理解。
作为一个审计人,重拾当初的梦想,我想我应该回来了。不为什么,就为了一颗程序猿的心。
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2016年4月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
2010年1月 (1)
2009年12月 (9)
2009年4月 (1)
2009年3月 (2)
2008年10月 (1)
相册
一些图
搜索
最新评论
1. re: 一些图
评论内容较长,点击标题查看
--崇文
2. re: 《Inside Com》小结(一)
变形金刚2 也是很久远的电影了,老了。
--崇文
3. re: Boost 中的 BOOST_STATIC_ASSERT
2016年4月22日:在没有看下面的内容时,我居然能看懂template <>是第一条语句的特化版,有些东西真的像游泳骑车,难丢难忘,泪流满面!
--崇文
4. re: Write Bolg With Windows Live Writer Test
评论内容较长,点击标题查看
--崇文
5. re: 【读书笔记】GDI对象 的跟踪与删除
评论内容较长,点击标题查看
--崇文
阅读排行榜
1. TopCoder 练习题之排列(Permutation)(2028)
2. 《Inside Com》小结(一)(1201)
3. Little thing about boost::mpl::if_(1010)
4. boost 中的 vector 及其 operator+=(990)
5. 对话框中的双缓冲(866)
评论排行榜
1. 《Inside Com》小结(一)(3)
2. 【读书笔记】GDI对象 的跟踪与删除(1)
3. 对话框中的双缓冲(1)
4. Write Bolg With Windows Live Writer Test(1)
5. Boost 中的 BOOST_STATIC_ASSERT(1)