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()));
}编译是没有问题,一运行就出现问题,各位大大们帮我看看这个简单的程序,哪里出错了?
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()));
}编译是没有问题,一运行就出现问题,各位大大们帮我看看这个简单的程序,哪里出错了?
直接运行后,显示ImgProcess已停止工作;
调试运行后,弹出对话框ImgProcess.exe 中的 0x00ce4366 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdd9 时发生访问冲突
在CDib类的IsValid()函数出中断,也就是在视图类的OnDraw函数下,pDoc->originalimg->IsValid()出现问题,想不通啊
-〉
if(originalimg!=NULL && pDoc->originalimg->IsValid())你都没判断originalimg自身就直接使用了
肯定会出问题
在文档类中,定义了CDib*originalimg,并且在构造函数中将指针置NULL;仅仅在"打开"菜单响应时,originalimg才不为空。点击运行时,应该直接跳过这个if语句的啊; 现在是,整个程序界面一出现就弹出ImgProcess.exe停止工作