源码如下
void CShowbitmapView::OnDraw(CDC* pDC)
{
CShowbitmapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBitmap m_Bitmap;
m_Bitmap.LoadBitmap("C:\Temp\WAS3679.tmp");
pDC->CreateCompatibleDC(NULL);
pDC->SelectObject(&m_Bitmap);
CClientDC ClientDC(this);
BITMAP BM;
m_Bitmap.GetObject(sizeof(BM), &BM);
ClientDC.BitBlt(0,0,BM.bmWidth, BM.bmHeight,pDC,0,0,SRCCOPY);
}问题在哪儿呢?其他的地方都没有不良代码,编译通过,run的时候报debug的错误
debug assertation failed

解决方案 »

  1.   

    外部文件要用loadimage啦
    ::LoadImage(AfxGetInstanceHandle(),
    m_ImageName,IMAGE_BITMAP,0,0,
    LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE)
    再SelectObject,BitBlt就OK了你debug到m_Bitmap.LoadBitmap("C:\Temp\WAS3679.tmp");
    就能看到失败了
      

  2.   

    LoadBitmap只是Load资源,不是Load BMP文件。
    你可以用CreateBitmap()来做
      

  3.   

    不要在pDC中使用CreateCompatibleDC了,应该使用CMemDC,然后画在pDC上就可以了
      

  4.   

    正确步骤应该是用一个CMemDC变量载入BITMAP,然后画到pDC上面就可以了
      

  5.   

    m_Bitmap.LoadBitmap("C:\Temp\WAS3679.tmp");
    应该是
    m_Bitmap.LoadBitmap("C:\\Temp\\WAS3679.tmp");吧
      

  6.   

    我来做个总结
    1。路径错了,应该是("C:\\Temp\\WAS3679.tmp");
    2。正确步骤应该是用一个CMemDC变量载入BITMAP,然后画到pDC上面
             ...  
             CDC dc;
             dc.CreateCompatibleDC(pDC);
             dc.SelectObject(&m_Bitmap);
              ....   
    pDC->BitBlt(0,0,BM.bmWidth, BM.bmHeight,&dc,0,0,SRCCOPY);
    3.LoadBitmap只是Load资源,不是Load BMP文件。
    4.可以使用
        ::LoadImage(AfxGetInstanceHandle(),
    m_ImageName,IMAGE_BITMAP,0,0,
             LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE)
        或用CreateBitmap()来做
    5。debug assertation failed
       是由ASSERT产生的,一般用来监测非法的参数,用VC debug是应该能看得到
       参数为什么非法
      

  7.   

    我来做个总结
    1。路径错了,应该是("C:\\Temp\\WAS3679.tmp");
    2。正确步骤应该是用一个CMemDC变量载入BITMAP,然后画到pDC上面
             ...  
             CDC dc;
             dc.CreateCompatibleDC(pDC);
             dc.SelectObject(&m_Bitmap);
              ....   
    pDC->BitBlt(0,0,BM.bmWidth, BM.bmHeight,&dc,0,0,SRCCOPY);
    3.LoadBitmap只是Load资源,不是Load BMP文件。
    4.可以使用
        ::LoadImage(AfxGetInstanceHandle(),
    m_ImageName,IMAGE_BITMAP,0,0,
             LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE)
        或用CreateBitmap()来做
    5。debug assertation failed
       是由ASSERT产生的,一般用来监测非法的参数,用VC debug是应该能看得到
       参数为什么非法
      

  8.   

    void CShowbitmapView::OnDraw(CDC* pDC)
    {
    CShowbitmapDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc); CBitmap m_Bitmap;
    m_Bitmap.LoadBitmap("C:\Temp\WAS3679.tmp");
                                 ~~~~~~~~~~~~~~~~~~~~~~~[改为"C:\\Temp\WAS3679.tmp"怎么会是tmp?]
    pDC->CreateCompatibleDC(NULL);
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[此处用法不论不类]
    pDC->SelectObject(&m_Bitmap);
    CClientDC ClientDC(this);
    BITMAP BM;
    m_Bitmap.GetObject(sizeof(BM), &BM);
    ClientDC.BitBlt(0,0,BM.bmWidth, BM.bmHeight,pDC,0,0,SRCCOPY);
    }// 以下给你一段可用的代码,已经给你调试通过了==========
    CDC dcMem;
    dcMem.CreateCompatibleDC(pDC);
    CBitmap BmpImg; HBITMAP hBmp=(HBITMAP)::LoadImage(NULL,"C:\\Temp\\WAS3579.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    BmpImg.Attach(hBmp);
    CBitmap *pOldBmp=dcMem.SelectObject(&BmpImg);
    BITMAP bmp; 
    BmpImg.GetBitmap(&bmp);
    pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
    bmp.bmWidth,bmp.bmHeight,SRCCOPY); */
    // or pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);
    题外话,请你尊重他人,看看书吧,不是告戒,算我求你