void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBitmap m_bitmap;
BITMAP stBitmap;
CRect rectbk;
GetClientRect(&rectbk);
//m_bitmap.Attach(hbmp);
m_bitmap.LoadBitmap(IDB_BACKVIEW);
m_bitmap.GetObject(sizeof(BITMAP),&stBitmap);
CSize bmsize(stBitmap.bmWidth,stBitmap.bmHeight);
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);
/*CBitmap* pOldBitmap =*/ dcMemory.SelectObject(&m_bitmap);
pDC->StretchBlt(rectbk.left,rectbk.top,rectbk.Width(),rectbk.Height(),&dcMemory,0,0,bmsize.cx,bmsize.cy,SRCCOPY);
//dcMemory.SelectObject(pOldBitmap);
m_bitmap.Detach();
m_bitmap.LoadBitmap(IDB_H);
dcMemory.SelectObject(&m_bitmap);
pDC->BitBlt(20,20,200,200,&dcMemory,0,0,SRCCOPY);
m_bitmap.Detach(); pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
pDC->TextOut(70,70,"单击发牌",8);
// TODO: add draw code for native data here}
}不停改变窗口大小,到一定时候提示内存错误 怎么回事?
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBitmap m_bitmap;
BITMAP stBitmap;
CRect rectbk;
GetClientRect(&rectbk);
//m_bitmap.Attach(hbmp);
m_bitmap.LoadBitmap(IDB_BACKVIEW);
m_bitmap.GetObject(sizeof(BITMAP),&stBitmap);
CSize bmsize(stBitmap.bmWidth,stBitmap.bmHeight);
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);
/*CBitmap* pOldBitmap =*/ dcMemory.SelectObject(&m_bitmap);
pDC->StretchBlt(rectbk.left,rectbk.top,rectbk.Width(),rectbk.Height(),&dcMemory,0,0,bmsize.cx,bmsize.cy,SRCCOPY);
//dcMemory.SelectObject(pOldBitmap);
m_bitmap.Detach();
m_bitmap.LoadBitmap(IDB_H);
dcMemory.SelectObject(&m_bitmap);
pDC->BitBlt(20,20,200,200,&dcMemory,0,0,SRCCOPY);
m_bitmap.Detach(); pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
pDC->TextOut(70,70,"单击发牌",8);
// TODO: add draw code for native data here}
}不停改变窗口大小,到一定时候提示内存错误 怎么回事?
创建了createcompatiabledc后需要释放
用ReleaseDC(......)
添加 ReleaseDC()也还是这个状况
dcMemory.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMemory.SelectObject(&m_bitmap);调用结束时:
dcMemory.SelectObject(pOldBitmap);
dcMemory.DeleteDC();
用以上方法进行清除,否则内存泄露。LoadBitmap的操作最好不要放在OnDraw中,因为会影响速度。最好是放在初始化函数中Load。