void   CMainWindow::OnPaint()   
  {   
        CPaintDC   dc(this);   
        CBrush   brush(RGB(255,0,0));   
        CBrush   *pOldBrush;   
        pOldBrush   =   dc.SelectObject(&brush);   
        dc.Ellipse(0,0,100,100);   
        dc.SelectObject(   poldBrush   );   
  }  
为什么这么就能删除对象阿

解决方案 »

  1.   

    void  CMainWindow::OnPaint()  
      {  
            CPaintDC  dc(this);  
            CBrush  brush(RGB(255,0,0));  
            CBrush  *pOldBrush;  
            pOldBrush  =  dc.SelectObject(&brush);  
            dc.Ellipse(0,0,100,100);  
            dc.SelectObject(  poldBrush  );  
            brush.DeleteObject();
      }  
      

  2.   

    CBrush从CGdiObject派生的,它有析构函数~CGdiObject,在里面会调DeleteObject
      

  3.   

    brush是局部变量,在它的析构里面能删除,但是,并不是所有的系统都可以,XP下可以,但是win98下不行!楼主可以测试一下!
      

  4.   

    要想删除与设备DC关联的GDI资源,必须先取消关联,不然,删除不了的!不然,楼主可以将代码改成这样试试:
    void  CMainWindow::OnPaint()  
      {  
            CPaintDC  dc(this);  
            CBrush  brush(RGB(255,0,0));  
            CBrush  *pOldBrush;  
            pOldBrush  =  dc.SelectObject(&brush);  
            dc.Ellipse(0,0,100,100);  
            //dc.SelectObject(  poldBrush  );  
            BOOL flag = brush.DeleteObject();   }  
    然后,你看看DeleteObject()返回的值,应该是FALSE;
      

  5.   

    GDI使用的形象比喻
    1. 有一个装画笔的文具盒,它里面装了固定的笔,这个文具盒是公共的,大家都可以用,但是在做完画后要保证文具盒里的笔还是原来的笔,不能多不能少不能换。 因为这个文具盒不是你一个人在用,其他人也会用,若你擅自更改,别人再按照默认的去用就会出错。 
    2. 文具盒已经装满了固定的笔。 
    3. 每次作画用的画笔有两种来源,一种是从公共文具盒中取,一种是不从文具盒中取。 
    现在我们来做画: 
    1) 笔要从文具盒中取 
     a.文具盒中有我们想要的画笔 
     我们直接从文具盒中取一支笔,做一幅画或者几幅画,完成后我们再将笔放回去。 
     b.文具盒中没有我们想要的画笔 
    我们可以先把文具盒里的一支笔取出来先存放到另外一个地方,然后把我们想要的笔放进去,然后再从文具盒中取出来作画,完了再把原来的笔替换回去。 
    2) 笔不从文具盒中取
    我们直接指定就用某个已经存在的画笔作画。 
    CDC类就相当于是在概念上有这么一个封装了很多画笔并且已经装满了的文具盒, 而一个CDC类的对象DC是实实在在存在的我们可以用的装满了画笔的文具盒, DC这个对象中有很多画笔,也有调换画笔的方法。