/////////////////////////////////////////////////////////////////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中的画笔么!!!
整个过程中使用的不都是这个画笔吗???恢复的意义何在???

解决方案 »

  1.   

    如果不恢复的话,谁知道接下来调用这段程序的那段程序之后万一画图时使用什么Pen呢?
      

  2.   

    以为是画刷CBrush,进来发现是画笔CPen。
    HDC是全局的,你这个函数改变了画笔颜色,不恢复的话,试想想在你使用之后,哪系统自己的绘画函数画出来的是什么?这是一个很基础的问题,可以看看书吧。推荐:SAM Teach you VISUAL C++ 21 DAY (3ed), 国内好像译学用VC++
      

  3.   

    有借有还,
    你要不还也行,以后出了问题(bug)
    一样要还啊!
      

  4.   

    之后Line4中又恢复成原来的画笔,但这个画笔不就是Line1中的画笔么!!!
    CPen pen(PS_SOLID,1,RGB(234,23,53)); //Line1CClientDC dc(this);//Line2
    //这里不是line1的画笔
    //所以后面用完了Line1的画笔 要恢复原状
      

  5.   

    /////////////////////////////////////////////////////////////////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  //画完后,恢复系统原来的色笔。
     
      

  6.   

    整个过程中使用的不都是这个画笔吗???恢复的意义何在???
    ===============
    恢复的意义有很多,上面不少人都说了不少了,我再加一个,你建立的CPen pen总要释放掉,如果这个画笔还在dc中的话,那么释放会失败,得将它选出dc之后才能释放。