我想为一个对话的上部和下部分别贴上两个位图。在这个对话框的OnEraseBkgnd()中:
        CDC dc;
dc.CreateCompatibleDC(pDC); 
CBitmap* pOldUpBitmap = dc.SelectObject(&m_BkUpBitmap);

//paste the up region
int bmw, bmh ;
BITMAP bmap;
m_BkUpBitmap.GetBitmap(&bmap);
bmw = bmap.bmWidth;
bmh = bmap.bmHeight;
pDC->BitBlt (0,0,bmw,bmh,&dc,0,0,SRCCOPY);

//paste the down region
dc.SelectObject(&m_BkDownBitmap);
m_BkDownBitmap.GetBitmap(&bmap);
        bmw = bmap.bmWidth;
bmh = bmap.bmHeight;
        int nTop = rc.bottom - bmh;
//int nLeft = rc.right - bmw;
        pDC->BitBlt(0,nTop,bmw,bmh,&dc,0,0,SRCCOPY);
        dc.SelectObject(pOldUpBitmap);
        return TRUE;

解决方案 »

  1.   

    好像只有自己new 的东西才需要自己释放.
      

  2.   

    没有泄露!
    检查CDC资源泄露的一个笨方法就是多次运行你的程序,如果出现花屏现象,则一定存在泄露,楼主可以试一下!
      

  3.   

    用CDC等GDI资源的包装类对象在析构函数中释放了资源,所以不会出现资源泄漏
      

  4.   

    以下摘自MSDN:
    When you no longer need the memory DC, call the DeleteDC function
      

  5.   

    但对于CDC,在析构函数中作了判断,所以你的写法不会有泄漏。
    CDC::~CDC()
    {
    if (m_hDC != NULL)
    ::DeleteDC(Detach());
    }