我想为一个对话的上部和下部分别贴上两个位图。在这个对话框的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;
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;
检查CDC资源泄露的一个笨方法就是多次运行你的程序,如果出现花屏现象,则一定存在泄露,楼主可以试一下!
When you no longer need the memory DC, call the DeleteDC function
CDC::~CDC()
{
if (m_hDC != NULL)
::DeleteDC(Detach());
}