这个画刷,让我甚是迷茫!!
/////////////////////////////////////////////////////////////////
CPen pen(PS_SOLID,1,RGB(234,23,53)); //Line1
//定义一个CPen类对象,并利用RGB宏改变其颜色
CClientDC dc(this);//Line2
CPen *pOldPen=dc.SelectObject(&pen); //将其选入设备表Line3
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);//Line4
////////////////////////////////////////////////////////////////
上面是一段相关函数,我个人感觉在Line1中构造了一个新画笔,而在Line3中将这个新画笔选入至设备环境,并赋予指针,整个过程中是对这个画笔的调用,
之后Line4中又恢复成原来的画笔,但这个画笔不就是Line1中的画笔么!!!
整个过程中使用的不都是这个画笔吗???恢复的意义何在???
[解决办法]
如果不恢复的话,谁知道接下来调用这段程序的那段程序之后万一画图时使用什么Pen呢?
[解决办法]
以为是画刷CBrush,进来发现是画笔CPen。
HDC是全局的,你这个函数改变了画笔颜色,不恢复的话,试想想在你使用之后,哪系统自己的绘画函数画出来的是什么?
这是一个很基础的问题,可以看看书吧。推荐:SAM Teach you VISUAL C++ 21 DAY (3ed), 国内好像译学用VC++
[解决办法]
有借有还,
你要不还也行,以后出了问题(bug)
一样要还啊!
[解决办法]
之后Line4中又恢复成原来的画笔,但这个画笔不就是Line1中的画笔么!!!
CPen pen(PS_SOLID,1,RGB(234,23,53)); //Line1
CClientDC dc(this);//Line2
//这里不是line1的画笔
//所以后面用完了Line1的画笔 要恢复原状
[解决办法]
/////////////////////////////////////////////////////////////////
CPen pen(PS_SOLID,1,RGB(234,23,53)); //Line1 这里只是创建一个画笔,并未选入设备DC
CClientDC dc(this);//Line2 取得系统DC
CPen *pOldPen=dc.SelectObject(&pen); //将其选入设备表Line3 选入DC,此时DC原来的画笔被换掉
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);//Line4 //画完后,恢复系统原来的色笔。
[解决办法]
整个过程中使用的不都是这个画笔吗???恢复的意义何在???
===============
恢复的意义有很多,上面不少人都说了不少了,我再加一个,你建立的CPen pen总要释放掉,如果这个画笔还在dc中的话,那么释放会失败,得将它选出dc之后才能释放。