CPen pen(PS_SOLID,3,RGB(80,79,123));

CClientDC dc(this); CPen *pPen=dc.SelectObject(&pen); dc.MoveTo(m_Old);
dc.LineTo(point); dc.SelectObject(pPen);     //我要是不选回去会如何据说这样绘制以后,需要用SelectObject恢复设备描述表中的画笔对象。我在实际做的时候,我发觉最后一句
dc.SelectObject(pPen)
我加不加都没关系,我又多实验了一下,也没发觉最后一句加和不加有什么区别,请高手指点下

解决方案 »

  1.   

    我觉得没有问题,我写过类型的文章。
    之所以有人强调“恢复设备”,其实是因为抄来抄去的结果。第一个说要“恢复设备”的作者,我想是因为像如下这种情况:
    void Draw(CDC* pDC)
    {
    }在这种情况下,由于是你接收了一个dc,而这个dc不是你创建的,你用完之后,别人可能还有用(你不能假设你用了之后,调用者就一定不使用它了),那么你必须“恢复设备”。至于内存泄漏这方面,我也实验过,不会有问题。你可以看我的博客里面的文章。被选入的设备,比如pen,不需要选出dc,仍然可以成功的被释放(比如调用deleteobject,或者类自动在析构时释放)。