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}
}不停改变窗口大小,到一定时候提示内存错误 怎么回事?

解决方案 »

  1.   

    申请了gdi资源没有释放!
      

  2.   

    dcMemory.CreateCompatibleDC(pDC); 
    创建了createcompatiabledc后需要释放
    用ReleaseDC(......)
      

  3.   

    selectobject选进去的,还要选出来。
      

  4.   

    selectobject选进去的,还要选出来。 能具体说怎么做么
    添加 ReleaseDC()也还是这个状况
      

  5.   

    m_bitmap.LoadBitmap(...),成员变量在加载资源时最好在构造函数里把它加载好
      

  6.   

    创建时:
    dcMemory.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = dcMemory.SelectObject(&m_bitmap);调用结束时:
    dcMemory.SelectObject(pOldBitmap);
    dcMemory.DeleteDC();
    用以上方法进行清除,否则内存泄露。LoadBitmap的操作最好不要放在OnDraw中,因为会影响速度。最好是放在初始化函数中Load。