CTestDlg::Test()
{
CClientDC dc(this);
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
dc.SetBkMode(TRANSPARENT);
dc.SelectObject(brush);
dc.Rectangle(50.50,100,100); brush.DeleteObject();
brush.CreateSolidBrush(RGB(128,128,255));
dc.SelectObject(brush);
dc.Rectangle(10,10,20,20);
brush.DeleteObject();
ReleaseDC(&dc);
}
上面这个函数根据实际需要通过SetTimer(1,1000,NULL)每秒钟执行一次,但是我发现在运行过程中内存资源在不断减少?是不是上面的代码造成了内存泄漏?请问如何才能解决这个问题?
谢谢!

解决方案 »

  1.   

    可以这么做
    在dc   SelectObject的时候 它返回一个指针 比如选择brush的时候返回CBrush 指针 
    可以定义为pOldBrush 在使用结束的时候你可以SelectObject 选回那个old brush
      

  2.   

    CTestDlg::Test()
    {
    CClientDC dc(this);
    CBrush brush,brush1;  //
    brush.CreateSolidBrush(RGB(0,0,0));
    dc.SetBkMode(TRANSPARENT);
             CBrush *pOldBrush; //
    //dc.SelectObject(brush);->
             pOldBrush=dc.SelectObject(&brush);
    dc.Rectangle(50.50,100,100); brush1.CreateSolidBrush(RGB(128,128,255));  //
    dc.SelectObject(&brush1);  //
    brush.DeleteObject();
    dc.Rectangle(10,10,20,20);
             dc.SelectObject(pOldBrush);  //
    brush1.DeleteObject();
    ReleaseDC(&dc);
    }
      

  3.   

    先释放掉dc,在释放其中的对象
    即:
    this->ReleaseDC(&dc);
    brush.DeleteObject();
    brush1.DeleteObject();