1、新建一个MFC工程ImgProcess
2、新建一个CDib类3、在ImgProcessDoc.h中添加:
               CDib *originalimg; //打开的图像
4、在ImgProcessDoc.cpp构造函数中添加:
               originalimg=NULL; //初始化指针
5、添加"打开"菜单消息OnFileOpen()到CImgProcessDoc中:
               // TODO: 在此添加命令处理程序代码
CFileDialog dlg(TRUE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP|*.BMP|"));
if(IDOK==dlg.DoModal()) 
{
filename.Format("%s",dlg.GetPathName());
originalimg=new CDib;
originalimg->LoadFile(filename);
}

6、ImgProcessView的OnDraw函数中,添加
                if(pDoc->originalimg->IsValid())
   {
pDoc->originalimg->Draw(pDC,pDoc->originalimg->m_lpDib,CPoint(20,20),CSize(pDoc->originalimg->GetWidth(),pDoc->originalimg->GetHeight()));
}
编译是没有问题,一运行就出现问题,各位大大们帮我看看这个简单的程序,哪里出错了?

解决方案 »

  1.   


    直接运行后,显示ImgProcess已停止工作;
    调试运行后,弹出对话框ImgProcess.exe 中的 0x00ce4366 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdd9 时发生访问冲突
      

  2.   


    在CDib类的IsValid()函数出中断,也就是在视图类的OnDraw函数下,pDoc->originalimg->IsValid()出现问题,想不通啊
      

  3.   

    if(pDoc->originalimg->IsValid())
    -〉
    if(originalimg!=NULL && pDoc->originalimg->IsValid())你都没判断originalimg自身就直接使用了
    肯定会出问题
      

  4.   

    改为if(pDoc->originalimg!=NULL && pDoc->originalimg->IsValid())后,还是一样的错误,为什么呢?
      

  5.   

    那现在pDoc->originalimg是不是为NULL呢
      

  6.   


    在文档类中,定义了CDib*originalimg,并且在构造函数中将指针置NULL;仅仅在"打开"菜单响应时,originalimg才不为空。点击运行时,应该直接跳过这个if语句的啊;   现在是,整个程序界面一出现就弹出ImgProcess.exe停止工作
      

  7.   

    不过,将if(pDoc->originalimg!=NULL),改成用文件名判断if(pDoc->filename!=_T("")),整个程序就可以运行了
      

  8.   

    use CImage insteadinclude <atlimage.h>
      

  9.   

    终于明白了,上述的错误,只因少了一个语句:UpdateAllViews(FALSE);在文档类加载了图像后,要及时更新视图,才可以用if(pDoc->originalimg!=NULL)