是不是忘了清除pBitmapDC 、pBitmap

解决方案 »

  1.   

    用把你的程运行起来,用F5,再在OnDraw中设一全断点,然后再去了断点,运行看看有没有位图显示,如果没有,再看一下你 那些变量有没有值!
      

  2.   

    pBitmap只在OnDraw()函数中有效.改成成员变量试试.
      

  3.   

    void CXXXView::OnDraw(CDC* pDC)
    {
    CDC TempDC;
    TempDC.CreateCompatibleDC(pDC);
    CBitmap bitmap;
    CBitmap* pOldTempBitmap;
              //每次都Load进来
    if (bitmap.LoadBitmap(MAKEINTRESOURCE(ID/*ID号*/)))
    {
    pOldTempBitmap = TempDC.SelectObject(&bitmap);
    if (!pDC->BitBlt(0, 0, nWidth, nHeight, 
    &TempDC, 0, 0, SRCCOPY))
    AfxMessageBox("Error");
    TempDC.SelectObject(pOldTempBitmap);
    if (!bitmap.DeleteObject())
    AfxMessageBox("Error");
    }
    }你试一下吧
      

  4.   

    to eastrock(东方之石)
    我现在只能获得这个位图的指针,没有id,因为这是程序运行中生成的,不是LOAD进来的。
      

  5.   

    我找到原因了,CBitmap* pBmp=(CBitmap*)pBitmapDC->SelectObject(pBitmap);
     
     pDC->BitBlt(0,0,rect.Width(),rect.Height(),
         pBitmapDC,rect.left,rect.top,SRCCOPY);
    pBitmaoDC->SelectObject(pBmp);
      

  6.   

    to AloneWolf(孤狼)
      谢谢你,你的回答是对的,你能告诉我为什么最后一定要加一句
     pBitmapDC->SelectObject(pBmp);
     
     回答对了就给你加分!
      

  7.   

    其实所有选入dc的Object在用完后都必须选出来,要不然下一次选入时就会
    出问题。参见SelectObject注解 
    返回值通常用于获得选入DC的对象的原始值。绘图操作完成后,原始的对象通常选回设备场景。在清除一个设备场景前,务必注意恢复原始的对象