本帖最后由 u010075825 于 2013-08-10 14:24:34 编辑

解决方案 »

  1.   

    你state没设置0,他怎么读?
    void CGraphicView::OnFileOpen() 
    {
    // TODO: Add your command handler code here
    CFileDialog dlg(TRUE,"BMP","*.BMP",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"位图文件(*.BMP)|*.BMP|");
        if (IDOK==dlg.DoModal())
    {
            BmpName.Format("%s",dlg.GetPathName());
            state = 0;
            ShowPicture(BmpName);
        }
    }
      

  2.   

    第二次准备加载图片是,检测到state==1,没有执行加载图像OnFileOpen内修改下试试:state = 0;
    ShowPicture(BmpName);
      

  3.   

    if(state==0)
    {
    HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);    if(m_bitmap != NULL)
        {
            m_bitmap.Detach();
            delete m_bitmap;
            m_bitmap = NULL;
            m_bitmap = new CBitmap();
        }

        m_bitmap.Attach(hBitmap);
        state=1;
    }没有测试,你这样改下试试
      

  4.   


    void CGraphicView::ShowPicture(CString BmpName)
    {if(state==0)
    {
    HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
         if(m_bitmap.m_hObject)
            DeleteObject(m_bitmap.Detach);
         m_bitmap.Attach(hBitmap);
         state=1;
    }
           Invalidate();
      
    }
      

  5.   

    已经修改,8行应该是Detach后少加了括号DeleteObject(m_bitmap.Detach())。
    还麻烦能稍微讲一下为什么要这么加么?
      

  6.   

    如果m_bitmap中已经与hBitmap关联起来你再Attach就会出错。所以要先把原来的hBitmap分离出来,然后再Attach。当然,为了避免内存泄露,还要把分离出来的hBitmap释放掉