/////////////////////////////////////////////////////////////////CPen pen(PS_SOLID,1,RGB(234,23,53)); //Line1//定义一个CPen类对象,并利用RGB宏改变其颜色
CClientDC dc(this);//Line2CPen *pOldPen=dc.SelectObject(&pen); //将其选入设备表Line3
dc.MoveTo(m_ptOrigin);dc.LineTo(point);dc.SelectObject(pOldPen);//Line4////////////////////////////////////////////////////////////////上面是一段相关函数,我个人感觉在Line1中构造了一个新画笔,而在Line3中将这个新画笔选入至设备环境,并赋予指针,整个过程中是对这个画笔的调用,
之后Line4中又恢复成原来的画笔,但这个画笔不就是Line1中的画笔么!!!
整个过程中使用的不都是这个画笔吗???恢复的意义何在???
CClientDC dc(this);//Line2CPen *pOldPen=dc.SelectObject(&pen); //将其选入设备表Line3
dc.MoveTo(m_ptOrigin);dc.LineTo(point);dc.SelectObject(pOldPen);//Line4////////////////////////////////////////////////////////////////上面是一段相关函数,我个人感觉在Line1中构造了一个新画笔,而在Line3中将这个新画笔选入至设备环境,并赋予指针,整个过程中是对这个画笔的调用,
之后Line4中又恢复成原来的画笔,但这个画笔不就是Line1中的画笔么!!!
整个过程中使用的不都是这个画笔吗???恢复的意义何在???
HDC是全局的,你这个函数改变了画笔颜色,不恢复的话,试想想在你使用之后,哪系统自己的绘画函数画出来的是什么?这是一个很基础的问题,可以看看书吧。推荐:SAM Teach you VISUAL C++ 21 DAY (3ed), 国内好像译学用VC++
你要不还也行,以后出了问题(bug)
一样要还啊!
CPen pen(PS_SOLID,1,RGB(234,23,53)); //Line1CClientDC dc(this);//Line2
//这里不是line1的画笔
//所以后面用完了Line1的画笔 要恢复原状
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之后才能释放。