BOOL CQQDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC (pDC); CBitmap bmp;
bmp.CreateCompatibleBitmap (pDC,rect.Width (),rect.Height ());
CBitmap *oldbmp=memDC.SelectObject (&bmp); pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY); memDC.SelectObject (oldbmp);
bmp.DeleteObject ();
memDC.DeleteDC (); return true;
}

解决方案 »

  1.   

    没有啊,
    去掉
    bmp.DeleteObject (); 
    memDC.DeleteDC (); 
    这二行代码也不会有内存泄漏
      

  2.   


    如果改成如下代码呢:BOOL CQQDlg::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRect rect; 
    GetClientRect(&rect); 
    CDC memDC; 
    memDC.CreateCompatibleDC (pDC); CBitmap *bmp =CBitmap::FromHandle((HBITMAP) LoadImage(NULL, _T("D:\\Program Files\\Tencent\\QQ\\NewSkins\\QQ2006\\BackgroundTitleLeft.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
    CBitmap *oldbmp=memDC.SelectObject (bmp); pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY); memDC.SelectObject (oldbmp); 
    bmp->DeleteObject (); 
    memDC.DeleteDC (); return true; 
    }
    怎么产生一次OnEraseBkgnd事件,内存就增加4K,是不是CBitmap对象释放的有问题啊?
      

  3.   


    可是用第一次贴出的代码:
    CRect rect; 
    GetClientRect(&rect); 
    CDC memDC; 
    memDC.CreateCompatibleDC (pDC); CBitmap bmp; 
    bmp.CreateCompatibleBitmap (pDC,rect.Width (),rect.Height ()); 
    CBitmap *oldbmp=memDC.SelectObject (&bmp); pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY); memDC.SelectObject (oldbmp); 
    bmp.DeleteObject (); 
    memDC.DeleteDC (); return true; 就没问题;
      

  4.   

    那你把这部分代码改一下HBITMAP hBitmap = LoadImage(NULL, _T("D:\\Program Files\\Tencent\\QQ\\NewSkins\\QQ2006\\BackgroundTitleLeft.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    最后,CloseHandle(hBitmap);一下