void CMyDlg::OnButton1() 
{
          CRect rect;
GetDlgItem(IDC_PICBOX)->GetClientRect(rect);
      HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T,FileName),IMAGE_BITMAP,rect.right,rect.bottom,
LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); 
m_bitmap.Attach(hBitmap);      CDC dcImage;
CDC * pDC=GetDlgItem(IDC_PICBOX)->GetDC();
if(!dcImage.CreateCompatibleDC(pDC)) return;
BITMAP bm;
m_bitmap.GetBitmap(&bm);   //show the image
dcImage.SelectObject(&m_bitmap);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY); 
         pDC->DeleteDC();
dcImage.DeleteDC();
}
以上代码在第一次显示图片时正常,再次选择图片显示时总是报错,请问为什么?

解决方案 »

  1.   

    函数尾部加入:
    delete pDC;
      

  2.   

    函数尾部加入:
    delete pDC;
    pDC = NULL;
      

  3.   

    m_bitmap.GetBitmap(&bm);   //show the image
    HBitmap* hOldBitmap=dcImage.SelectObject(&m_bitmap);
    ...........
    pDC->DeleteDC();
    ::DeleteObject(m_bitmap);
    dcImage.SelectObject(hOldBitmap);
    dcImage.DeleteDC();
      

  4.   

    void CMyDlg::OnButton1() 
    {
              CRect rect;
    GetDlgItem(IDC_PICBOX)->GetClientRect(rect);
          HBITMAP hBitmap=(HBITMAP)LoadImage()
    m_bitmap.Attach(hBitmap);  //一个CBitmap不能Attach两次。你在CMyDlg的构造函数里把m_bitmap初始化好就行了,不要每次点按钮的时候再来载入位图。
             …………
    }