MFC中如何重载打开、新建文件操作!
jn989 2008-10-31 07:03:24 在做一个文本编辑器,需要能对至少两种文件进行编辑(如.cpp和.asm)。(默认的打开和新建文件不能满足要求,即使修改字符串表也只能在过滤器加一个后缀名。)所以本人考虑重载open和new操作,已经忙了好一段时间,有个问题一直不能得意解决,请高手帮帮忙啊,救命啊!
用的是MDI,但没有建两个文档模板,只是用了一个全局的标志位表示是哪种文件,即:采用多视的思路。打开一个文件时,会根据后缀名设置标志位,然后调用不同的关键字集高亮显示关键字;新建也是如此,就像VC一样,让用户选一种文件,同时设置标志位,然后新建!思路就是这样的。
我已经基本实现,但为什么会这样:
要是没有这句:cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;(即程序初始会打开一个视图)的话新建和打开都是没问题的,但要是加了上边那句(即程序初始只有菜单没有视图)的话,打开和新建就会导致程序崩溃。(我怀疑是不是子框架已经销毁了啊)实在搞不懂,请高人帮忙啊!我的重载函数:
void CSampleView::OnFileOpen()
{
CString m_szFilePathName; //图像文件路径
CString m_szFileName;
CFileDialog dlg(true,NULL,NULL,OFN_OVERWRITEPROMPT,"ASM Files(*.asm)|*.asm|C++ Files(*.c++)|*.cpp||",NULL);
if(dlg.DoModal()==IDOK)
{
m_szFileName = dlg.GetFileName();
m_szFilePathName = dlg.GetPathName();
CString type=dlg.GetFileExt();//得到文件扩展名
if(type=="asm")
isAsm=true;
else
isAsm=false;
}
else
return;
CSampleDoc* pDoc = GetDocument();
pDoc->SetTitle(m_szFileName);
pDoc->OnOpenDocument(m_szFilePathName);
pDoc->UpdateAllViews(NULL);
}
void CSampleView::OnFileNew()
{
CNewFileDlg nfDlg(this);
if(nfDlg.DoModal()==IDOK)
;
]
打开的对话框
void CNewFileDlg::OnOK()
{
UpdateData(true);
CString m_szFilePathName;
m_szFilePathName=m_save_path;
m_szFilePathName+="\\";
m_szFilePathName+=m_filename;
CString string; //从列表框中获得的字符串
int nIndex = m_NewListBox.GetCurSel();
if(nIndex!=LB_ERR)
m_NewListBox.GetText(nIndex,string);
//AfxMessageBox(string);
CString extStr; //获得扩展名
if(string=="C File (*.c)")
{
extStr=".c";
isAsm=false;
}
else if(string=="Asm File (*.asm)")
{
extStr=".asm";
isAsm=true;
}
m_szFilePathName+=extStr;
CSampleApp *theApp;
theApp=(CSampleApp *)::AfxGetApp();
CMainFrame *myWin;
myWin=(CMainFrame *)theApp->GetMainWnd();
CChildFrame *myChildFrame;
myChildFrame=(CChildFrame *)myWin->MDIGetActive();
CSampleDoc *pDoc;
pDoc=(CSampleDoc *)myChildFrame->GetActiveView()->GetDocument();
pDoc->OnSaveDocument(m_szFilePathName);
CSampleView *pView;
pView=(CSampleView *)myChildFrame->GetActiveView();
pView->OnFileOpen(m_szFilePathName);
CDialog::OnOK();
}
代码帖的较多,其实问题没这么繁琐,由于本人对mfc不胜熟悉,也许哪位高人一看便知,希望大家多多帮忙啊。(有兴趣的朋友可以留下邮箱,我给您发过去,运行一下可能会对问题比较清楚)