CPoint point1,point2; 
 CPen pen; 
 CPen * pOldPen=NULL; 
// pen.CreatePen(PS_SOLID,1,RGB(0,0,192)); 
 if(!(m_ConnectInterface.GetCount()==0)) return; 
 point1.y=point2.y=m_InterfaceRect.top+(int)(m_InterfaceRect.Height()/2); 
 if (m_nInterfaceType == 0) //画左边接口 
 { 
  point1.x = m_InterfaceRect.left; 
  point2.x = point1.x-10; 
  pen.CreatePen(PS_SOLID,1,RGB(0,0,192)); 
  pOldPen=pDC->SelectObject(&pen); 
  //画圆 
  pDC->Ellipse(point2.x - 4,point2.y - 2, point2.x,  point2.y + 2); 
  pDC->SelectObject(pOldPen); 
  //画接口线 
     pen.DeleteObject(); 
  pen.CreatePen(PS_SOLID, 2, RGB(0, 0, 192)); 
  pDC->SelectObject(&pen); 
  pDC->MoveTo(point1); 
  pDC->LineTo(point2); 
  pDC->SelectObject(pOldPen); 
  pen.DeleteObject(); 
 } 
 else                       //画右边接口 
 { 
  point1.x=m_InterfaceRect.right; 
  point2.x=point1.x+10; 
  pen.CreatePen(PS_SOLID,1,RGB(192,0,192)); 
  pOldPen=pDC->SelectObject(&pen); 
  //画圆 
  pDC->Ellipse(point2.x, point2.y - 2, point2.x + 4, point2.y + 2); 
  pDC->SelectObject(pOldPen); 
  //画接口线 
  //::DeleteObject(pen.Detach()); 
  pen.DeleteObject(); 
  pen.CreatePen(PS_SOLID, 2, RGB(192, 0, 192)); 
  pDC->SelectObject(&pen); 
  pDC->MoveTo(point1); 
  pDC->LineTo(point2);   pDC->SelectObject(pOldPen); 
  pen.DeleteObject(); 
 } 
  
在程序运行时调用该函数时会导致资源不足 
请问是哪里没有释放吗?? 
3x!!!

解决方案 »

  1.   

    pDC->SelectObject(pOldPen); 后就不用deleteobject
      

  2.   

    用新对象绘图后,必须从内存中删除该对象。因为设备环境仍指向该对象,所以,必须
    先把它指向另一个对象—通常是原先的对象。
    d c . S e l e c t O b j e c t ( p O l d P e n ) ; // select another object
    p e n . D e l e t e O b j e c t ( ) ; // deletes Pen object (returning
    // destroys the CPen object)
      

  3.   

    //画接口线 
         pen.DeleteObject(); 
      pen.CreatePen(PS_SOLID, 2, RGB(0, 0, 192)); 
      pDC->SelectObject(&pen); 
      pDC->MoveTo(point1); 
      pDC->LineTo(point2); 
      pDC->SelectObject(pOldPen); 
      pen.DeleteObject();  问题就在上面代码中,应该这么写:
    //画接口线 
         pen.DeleteObject(); 
      pen.CreatePen(PS_SOLID, 2, RGB(0, 0, 192)); 
      pOldPen = pDC->SelectObject(&pen); //这里,看清楚了。
      pDC->MoveTo(point1); 
      pDC->LineTo(point2); 
      pDC->SelectObject(pOldPen); 
      pen.DeleteObject(); 
     
    else里面有同样的问题。