void CFlickerView::OnDraw(CDC* pDC)
{
CFlickerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CBitmap bmap;
bmap.LoadBitmap(IDB_BITMAP1);
CDC TempDC;
TempDC.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap=TempDC.SelectObject(&bmap);
BITMAP bm;
bmap.GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(0,0,bm.bmHeight,bm.bmWidth,&TempDC,0,0,SRCCOPY);
TempDC.SelectObject(pOldBitmap);

解决方案 »

  1.   

    debug asserting的时候,可以查看call stack到底是哪儿出来的assert
      

  2.   

    pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&TempDC,0,0,SRCCOPY);//没记错的话,Width在前面。
    TempDC.SelectObject(pOldBitmap);
    TempDC.DeleteDC();//使用完后要释放GDI对象资源。
    bmap.DeleteObject();
      

  3.   

    怎么call stack啊?
    单步跟踪好像没用,转到Mfc\include\afwin1.nfl,其中这行
    { ASSERT(m_hObject != NULL); return ::GetObject(m_hObject, nCount, lpObject); }另外加了TempDC.DeleteDC();//使用完后要释放GDI对象资源。
    bmap.DeleteObject();
    也不行