MFC MDI 单文档多视图的保存问题

Gushleo 2009-11-09 10:52:56

我利用MDI创建多个视图 并使这些视图链接到同一个文档上

但是在进行保存操作时 却无法使用CDocument: Filesave()
调用一直出错 请问下高手 这是什么问题啊
困扰好久了 刚做一个小项目的界面 错误好多
一直在排除 好苦恼
希望能得到 比较清晰的说明或思路
...全文
295 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gushleo 2009-11-11
  • 打赏
  • 举报
回复
只是贴了一些代码 因为本身代码比较长
所以自以为是的贴了一些 不知道是不是问题所在
恩 继续关注
Gushleo 2009-11-11
  • 打赏
  • 举报
回复
File :doccore.cpp
Line: 290
Gushleo 2009-11-11
  • 打赏
  • 举报
回复

pDocTemplate1 = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CEB666Doc),
RUNTIME_CLASS(CChildFrame), // main SDI frame window
RUNTIME_CLASS(CKeysetView));
AddDocTemplate(pDocTemplate1);


pDocTemplate2 = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CEB666Doc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CChView));
AddDocTemplate(pDocTemplate2);


pDocTemplate3 = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CEB666Doc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CFucView));
AddDocTemplate(pDocTemplate3);



这样建立模板 后面
初始化窗口
m_bFileOpenFirst=TRUE;
CMainFrame* pMainFrame = new CMainFrame;//CEB666
mp_doc=new CEB666Doc;
//mp_doc->OnNewDocument();
mp_doc->SetTitle("HQT EB666 radio program software");
CCreateContext context;
context.m_pCurrentDoc=mp_doc;
context.m_pNewViewClass=NULL;//RUNTIME_CLASS(CEB666View);
context.m_pNewDocTemplate=NULL;//pDocTemplate;
context.m_pLastView=NULL;
context.m_pCurrentFrame=NULL;//pTreeFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,NULL, &context ))
return FALSE;
m_pMainWnd = pMainFrame;




第一个窗口
context.m_pCurrentDoc=mp_doc; //that's the way I avoid to create new document every time I open a new view
context.m_pNewViewClass=RUNTIME_CLASS(CChView);
context.m_pNewDocTemplate=pDocTemplate1;
context.m_pLastView=(((CMainFrame *)m_pMainWnd)->GetActiveFrame() ? ((CMainFrame *)m_pMainWnd)->GetActiveFrame()->GetActiveView() : NULL);
context.m_pCurrentFrame=((CMainFrame *)m_pMainWnd)->GetActiveFrame();
pChFrame->LoadFrame(IDR_MAINFRAME1,WS_OVERLAPPEDWINDOW ,m_pMainWnd, &context );
pChFrame->MoveWindow(0,0,725,500);
pChFrame->SetWindowText(g_LoadString("IDS_CHANNEL"));
pChFrame->InitialUpdateFrame(mp_doc,TRUE);

第二个窗口
if(pFuncFrame!=NULL)
{
pFuncFrame->MDIActivate();
return;
}
pFuncFrame = new CChildFrame();
CCreateContext context;
context.m_pCurrentDoc=mp_doc; //that's the way I avoid to create new document every time I open a new view
context.m_pNewViewClass=RUNTIME_CLASS(CFucView);
context.m_pNewDocTemplate=pDocTemplate2;
context.m_pLastView=(((CMainFrame *)m_pMainWnd)->GetActiveFrame() ? ((CMainFrame *)m_pMainWnd)->GetActiveFrame()->GetActiveView() : NULL);
context.m_pCurrentFrame=((CMainFrame *)m_pMainWnd)->GetActiveFrame();
if (!pFuncFrame->LoadFrame(IDR_MAINFRAME1,WS_OVERLAPPEDWINDOW ,m_pMainWnd, &context ))return;
pFuncFrame->MoveWindow(20,30,695,520);
pFuncFrame->SetWindowText(g_LoadString("IDS_FUNCTION"));
pFuncFrame->InitialUpdateFrame(mp_doc,TRUE);


都是链接到mp_doc


void CEB666Doc::OnFileSave()
{
// TODO: Add your command handler code here
if(!GetPathName().IsEmpty())
{
CString szTemp=g_LoadString("IDS_WARN_SAVE");
szTemp += GetPathName();
if(AfxGetMainWnd()->MessageBox(szTemp,g_LoadString("IDS_PROMPT"),
MB_OKCANCEL | MB_ICONEXCLAMATION)==IDCANCEL)
return;
}
CDocument::OnFileSave();
}


烦高手 来解决下
fandh 2009-11-09
  • 打赏
  • 举报
回复
怀疑你代码的原因,贴代码吧!
yuhudie203 2009-11-09
  • 打赏
  • 举报
回复
多文档还是单文档多视图分割窗体?
MDI还是SDI 上个代码
_JeffreyWu 2009-11-09
  • 打赏
  • 举报
回复
发帖提问的时候,建议帖一下代码和错误信息.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧