我想循环显示图像,在遍历文件中写了显示图片的代码,通过控件做显示循环,调试没问题,运行的时候出现ASSERT(m_hFile != INVALID_HANDLE_VALUE)这一句,设置断点之后发现if(!file.open)这句有问题,有高手能为我解答一下吗,弄了好久没弄出来,麻烦了
void CbianliDoc::OnOpenfile()
{
// 判断当前图像是否已经被改动
if (IsModified())
{
// 提示用户该操作将丢失所有当前的修改
if (MessageBox(NULL, "重新打开图像将丢失所有改动!是否继续?", "系统提示", MB_ICONQUESTION | MB_YESNO) == IDNO)
{
// 用户取消操作,直接返回
return;
}
}
CFile file;
CFileException fe;
CString strPathName;
//strPathName.Format("D:\\难点\\Image00%d.bmp",i);
CFileFind finder;
CString dir="D:\\石英提取图像";
dir+=_T("\\*.bmp");
BOOL str=finder.FindFile(dir);
while(str)
{
str=finder.FindNextFileA();
// 获取当前文件路径
/*CString p;
p.Format("%d",str);
AfxMessageBox(p);
*/
strPathName = finder.GetFilePath(); /*"D:\\难点\\Image003.bmp";*///
GetPathName();
// 重新打开文件
if (!file.Open(strPathName, CFile::modeRead | CFile::shareDenyRead, &fe))
{
// 失败
ReportSaveLoadException(strPathName, &fe,
FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
// 返回
return;
}
// 更改光标形状
BeginWaitCursor();
// 尝试调用ReadDIBFile()读取图像
TRY
{
m_hDIB = ::ReadDIBFile(file);
}
CATCH (CFileException, eLoad)
{
// 读取失败
file.Abort();
// 恢复光标形状
EndWaitCursor();
// 报告失败
ReportSaveLoadException(strPathName, eLoad,
FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
// 设置DIB为空
m_hDIB = NULL;
// 返回
return;
}
END_CATCH
// 初始化DIB
InitDIBData();
// 判断读取文件是否成功
if (m_hDIB == NULL)
{
// 失败,可能非BMP格式
CString strMsg;
strMsg = "读取图像时出错!可能是不支持该类型的图像文件!";
// 提示出错
MessageBox(NULL, strMsg, "系统提示", MB_ICONINFORMATION | MB_OK);
// 恢复光标形状
EndWaitCursor();
// 返回
return;
}
// 初始化胀标记为FALSE
SetModifiedFlag(FALSE);
// 刷新
UpdateAllViews(NULL);
}
// 恢复光标形状
EndWaitCursor();
// 返回
return;
}