急,请帮忙看看有没有内存泄漏,什么东西在狂吃内存啊?
这是一个基于对话框的应用程序,我在一个定时器(100ms)里刷新屏幕InvalidateRect(&lr,FALSE),发现内存很快用光了,导致IDB_MAINBACK不能正常显示出来,请帮忙分析,该如何解决?多谢。
1、显示函数:
void CXDTDlg::OnPaint()
{
CPaintDC dc(this);
CBitmap memBitmap;
CDC memDC;
memDC.CreateCompatibleDC(NULL);
memBitmap.CreateCompatibleBitmap(&dc,800,600);
CBitmap *pOldBit=memDC.SelectObject(&memBitmap);
memBitmap.LoadBitmap(IDB_MAINBACK);
memDC.SelectObject(&memBitmap);
DrawFairy(&memDC,i,i);
dc.BitBlt(0,0,800,600,&memDC,0,0,SRCCOPY);
memDC.SelectObject(pOldBit);
CDialog::OnPaint();
}
2、void CXDTDlg::DrawFairy(CDC *pDC, int x, int y)
{
CDC dcFairy;
CDC dcMask;
dcFairy.CreateCompatibleDC(pDC);
dcMask.CreateCompatibleDC(pDC);
CBitmap m_bmFairy,m_bmMask;
m_bmFairy.LoadBitmap(IDB_HEART);
m_bmMask.LoadBitmap(IDB_HEARTMASK);
dcMask.SelectObject(&m_bmMask);
dcFairy.SelectObject(&m_bmFairy);
BITMAP bm;
m_bmFairy.GetObject(sizeof(bm),&bm);
dcFairy.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMask,0,0,MERGEPAINT);
pDC->BitBlt(x,y,bm.bmWidth,bm.bmHeight,&dcMask,0,0,NOTSRCERASE);
pDC->BitBlt(x,y,bm.bmWidth,bm.bmHeight,&dcFairy,0,0,SRCINVERT);
}