hur.cn - 华软网

 热门搜索

如何让程序一开始运行时就打开上次关闭的文件?

  作者:未知    来源:网络    更新时间:2011/8/20
在一个SDI程序里面,我在InitInstance()这个函数里增加了这样的代码,但程序启动时出现了一个打开文档的错误,当按下弹出对话框的确定按钮时,程序就退出了,不知原因出在哪,希望大侠能给予答疑释惑。

CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

if(cmdInfo.m_strFileName.GetLength()==0) //打开程序时同时打开上次关闭的文档
           { 
if(m_pRecentFileList-> m_nSize> 0   
&&   m_pRecentFileList-> m_arrNames[0].IsEmpty()==FALSE) 

cmdInfo.m_strFileName   =   m_pRecentFileList-> m_arrNames[0]; 
cmdInfo.m_nShellCommand   =   CCommandLineInfo::FileOpen; 

else
{
cmdInfo.m_nShellCommand   =     CCommandLineInfo::FileNothing; 
}
  } 



// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;


顺便贴一张我写的小秘书公文包的一个截图吧:


---华软 网友回答---
CWinApp::CloseAllDocuments() ??
---华软网友回复---
先要:
AfxGetApp()->AddToRecentFileList(XxxxFileName);

---华软网友回复---
AfxGetApp()->AddToRecentFileList(LastFileName);

---华软网友回复---
实在不行自己在关闭前做个记录,然后第二次打开时读取记录
---华软网友回复---
AfxGetApp()->AddToRecentFileList(LastFileName);
使用了这个函数问题得到解决,谢谢!当天解决当天结贴去。
---华软网友回复---
刚才反复试了下,问题还是没得到彻底的解决,还会出现这样那样的错误,就是当我把刚创建的文档删除时,程序又会打不开了,出现和原来一样的问题。看来这个贴还得慢些结。
---华软网友回复---
BOOL CxxxApp::OnIdle(LONG lCount) 
{
// TODO: Add your specialized code here and/or call the base class
for (int j=0;j<4;j++)
{
CString fn=RFileList->m_arrNames[j];
CFileStatus Status;
if (CFile::GetStatus(fn,Status)==FALSE) // not exist
RFileList->Remove(j);
}

return CWinApp::OnIdle(lCount);
}

---华软网友回复---
AfxGetApp()->AddToRecentFileList(LastFileName);
搭车请教,这个函数会把信息保存到哪里?注册表,还是ini?
---华软网友回复---
LoadStdProfileSettings();  // Load standard INI file options (including MRU)

---华软网友回复---
保存到哪里是可以改的,默认是注册表。
---华软网友回复---
引用 1 楼 visualeleven 的回复:
CWinApp::CloseAllDocuments() ??

Sorry,我看错了,我还以为是是要关闭之前所有打开的文件。
http://www.codeproject.com/KB/docview/most_recent_used.aspx
参考一下这个,希望对你有帮助~
---华软网友回复---
经过了半夜时间搜罗资料终于搞定,我用了这样两个函数,m_pRecentFileList->ReadList();
m_pRecentFileList->WriteList();进行写注册表,最后CSSBriefcaseApp* pApp = (CSSBriefcaseApp*)AfxGetApp(); 
pApp-> m_pDocManager->OpenDocumentFile((LPCTSTR)m_pRecentFileList-> m_arrNames[0]);才得以解决问题。谢谢大家的意见! 

我还不知7楼的方法是否可行,以后再试下吧。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。