我的MFC程序有一个问题,我不知道如何解决。
我正在编写一个涉及数据序列化的程序。我决定覆盖OnFileOpen和OnFileSave函数,因为我想在打开/保存文件时修改文件对话框。
奇怪的是,在重写这些功能之后。我意识到我无法使用默认的拖放功能加载文件+单击最近文件列表中的文件。如果我这样做,会弹出以下错误窗口:
调试断言失败! 文件:f:\ dd \ vctools \ vc7libs \ ship \ atlmfc \ src \ mfc \ wingdi.cpp行:1119 有关程序如何导致断言失败的信息,请参阅.... etc
但是如果我通过正常步骤打开文件(菜单栏 - >文件 - >打开文件),程序运行正常,没有任何投诉。
我查看了wingdi.cpp文件,第1119行与CGdiObject :: Attach()函数关联...但我的程序根本不涉及Attach()函数...
有人可以帮我解决这个奇怪的行为吗?
我的首要代码如下:
void CXXXDoc::OnFileOpen()
{
// TODO: Add your command handler code here
TCHAR szFilters[]= _T("XXX Type Files (*.xxx)|*.xxx|All Files (*.*)|*.*||");
CFileDialog fileDlg(TRUE, _T("xxx"), _T("*.xxx"), OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, szFilters);
if(fileDlg.DoModal() == IDOK)
{
CFile oldFile;
ASSERT (oldFile != NULL);
oldFile.Open(fileDlg.GetPathName(), CFile::modeRead | CFile::shareExclusive);
FilePathName = fileDlg.GetPathName();
SetTitle(FilePathName);
AfxGetApp()->AddToRecentFileList(FilePathName);
CArchive loadArchive(&oldFile, CArchive::load | CArchive::bNoFlushOnDelete); // Create the archive to load data, the archive must be closed manually after the loading process
Serialize(loadArchive);
loadArchive.Close();
oldFile.Close();
UpdateAllViews(0);
}
}
void CXXXDoc::OnFileSave()
{
CFile newfile;
ASSERT (newfile != NULL);
newfile.Open(FilePathName, CFile::modeWrite);
CArchive saveArchive(&newfile, CArchive::store); // Create the archive to save data,
Serialize(saveArchive);
saveArchive.Close();
newfile.Close();
}