导航
  • 主页
  • VC综合技术
  • 互联网技术
  • .NET 技术
  • MFC Plus
  • VC/MFC界面
  • VC/MFC 进程
  • VC/MFC 数据库
  • VC++技术资源

VC 一次保存多个文档视图

LZNJ06 2011-11-02 10:51:38
VC 多文档程序,有多个文档视图,视图关闭一个提示保存一次,这样多个视图 保存为多个文件,我想把多个文档视图在关闭主框架时,一次保存性保存为一 个工程文件,不知如何进行。谢谢。
...全文
128 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgstudyvc 2011-11-03
单个能保存,多个也一样啊,"我想通过MFC 本身的文档保存结构的改造来实现"应该是方向
回复
yisiyou 2011-11-03
这个问题我不会,我也想知道答案。学习下!
回复
Eleven 2011-11-03
这个需要自己显示文件的保存,然后调用CWinApp::CloseAllDocuments()关闭所有打开的文档。
回复
LZNJ06 2011-11-03
我想通过MFC 本身的文档保存结构的改造来实现。还得研究一下。
回复
LZNJ06 2011-11-02
谢谢 WITPIDAN,谢谢。
回复
松花皮蛋 2011-11-02
需要详细规划好你的工程文件结构,文件结构一定要仔细想好,符合你的需求就行。给你看段我的工程文件保存代码
BOOL CCalibrationApp::SaveProject(CString Path)
{
Projectchang_flag = FALSE;
if (Path=="")
{
AfxMessageBox("当前无工程文件保存!");
return false;
}
if (A2lFile=="" && A19File=="")//2009.10.29 pidan
{
AfxMessageBox("空工程不支持保存操作!");
return FALSE;
}
CString TempFile=Path+".temp";
CString Mon_DOC;
CString Mon_Name,Mon_Uint; //2009.7.1 添加单位量
CString MAX,MIN,LINE_COLOR;
if (isChinese)
{
::WritePrivateProfileString("SOFT","LANGUAGE","CHINESE",TempFile);//汉语
}
else
{
::WritePrivateProfileString("SOFT","LANGUAGE","ENGLISH",TempFile);//英语
}
::WritePrivateProfileString("SOFT","LEVELS",strUSER_LEVELS,TempFile);
::WritePrivateProfileString("SOFT","RIGHTS",strUSER_RIGHT,TempFile);
::WritePrivateProfileString("FILE_PATH","A2lFile",A2lFile,TempFile);
#ifdef USERTYPE
{
::WritePrivateProfileString("FILE_PATH","S19File",S19File,TempFile);
}
#else
{
::WritePrivateProfileString("FILE_PATH","S19File","NONE",TempFile);
}
#endif
::WritePrivateProfileString("FILE_PATH","A19File",A19File,TempFile);
::WritePrivateProfileString("SELECT_MONITOR","SELECT_MONITORNAME",select_monitor,TempFile);
//保存标定窗口
CString TEMP = "";
POSITION posB = pCalTemplate->GetFirstDocPosition();
while (posB)
{
CDocument* pdocB = pCalTemplate->GetNextDoc(posB);
TEMP +=pdocB->GetTitle() +" ";
}
::WritePrivateProfileString("MUTIL_CALIBRATION","MUTIL_CALIBRATIONNAME",TEMP,TempFile);

/* CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; 保存单窗口的标定量
CString temp_single="";
std::vector<A2lMAP*>::iterator iter = pFrame->pvecSingleMap.begin();
for (;iter!=pFrame->pvecSingleMap.end();++iter)
{
temp_single+=(*iter)->strMapName+" ";
}
::WritePrivateProfileString("SINGLE_CALIBRATION","SINGLE_CALIBRATIONNAME",temp_single,TempFile);*/

// ----------2009.5.10 保存多窗口的单值标定变量
CString Single_Cal,Last_Single_Cal;//名称
CString Single_Value,Last_Single_Value;//数值
CString Single_title,Last_Single_title;//标题
POSITION SingCal = pSCalTemplate->GetFirstDocPosition();
while (SingCal)
{
Single_Cal +="@ ";//分割符号
Single_Value +="@ ";
Single_title +="@";
CDocument *SingCalpdoc = pSCalTemplate->GetNextDoc(SingCal);
Single_title += SingCalpdoc->GetTitle();//取得窗口名字
POSITION pSingCal = SingCalpdoc ->GetFirstViewPosition();
while (pSingCal)
{
CSingleCalView *pSingleView =(CSingleCalView *)SingCalpdoc->GetNextView(pSingCal);
CString tempstrsingcal;
for (int sk =1;sk<pSingleView->m_pGridCtrl->GetRowCount();sk++)
{
Single_Value+=pSingleView->m_pGridCtrl->GetItemText(sk,2)+" ";
Single_Cal += pSingleView->m_pGridCtrl->GetItemText(sk,0)+" ";
}
}
Last_Single_Cal+=Single_Cal;
Last_Single_Value+=Single_Value;
Last_Single_title +=Single_title;
Single_Cal ="";
Single_Value ="";
Single_title ="";
}
//AfxMessageBox(Last_Single_title);
::WritePrivateProfileString("SINGLE_CALIBRATION","SINGLE_CALIBRATIONTITLE",Last_Single_title,TempFile);
::WritePrivateProfileString("SINGLE_CALIBRATION","SINGLE_CALIBRATIONNAME",Last_Single_Cal,TempFile);
::WritePrivateProfileString("SINGLE_CALIBRATION","SINGLE_CALIBRATIONVALUE",Last_Single_Value,TempFile);
//---------------------------------
CString LAST_MONINAME,LAST_MAX,LAST_MIN,LASTLINE_COLOR,LAST_UNIT;//2009.7.1 添加单位量
POSITION pos = pMonTemplate->GetFirstDocPosition();
while (pos)
{
CDocument* pdoc = pMonTemplate->GetNextDoc(pos);
Mon_DOC = pdoc->GetTitle();
LAST_MONINAME +="@ ";
LAST_UNIT +="@ ";//2009.7.1 添加单位量
LAST_MAX += "@ ";
LAST_MIN +="@ ";
LASTLINE_COLOR+="@ ";
POSITION ppos = pdoc->GetFirstViewPosition();
while(ppos)
{
CMonitorView* pview = (CMonitorView*)pdoc->GetNextView(ppos);
pview->KillTimer(1);
// pview->KillTimer(2);
CString tempstr;
for (int k=0;k<pview->m_ListSingle.GetItemCount();k++)
{
Mon_Name += pview->m_ListSingle.GetItemText(k,2)+" ";
Mon_Uint += pview->m_ListSingle.GetItemText(k,4)+" ";//2009.7.1 添加单位量
MAX +=pview->m_ListSingle.GetItemText(k,5)+" ";
MIN +=pview->m_ListSingle.GetItemText(k,6)+" ";
tempstr.Format(_T("%d"),pview->Project_Color[k]);
LINE_COLOR +=tempstr+" ";
}

}
LAST_MONINAME +=Mon_Name;
LAST_UNIT += Mon_Uint;//2009.7.1 添加单位
LAST_MAX += MAX;
LAST_MIN +=MIN;
LASTLINE_COLOR +=LINE_COLOR;
Mon_Name ="";
Mon_Uint ="";
MAX ="";
MIN ="";
LINE_COLOR="";
}
::WritePrivateProfileString("MONITOR_DOC","MONITOR_DOCNNAME",LAST_MONINAME,TempFile);
// ShowString("保存监控窗口!");
::WritePrivateProfileString("MONITOR_DOC","MONITOR_UNIT",LAST_UNIT,TempFile);
//2009.7.1 保存单位
::WritePrivateProfileString("MONITOR_DOC","MAX_VALUE",LAST_MAX,TempFile);
// ShowString("保存监控范围MAX!");

::WritePrivateProfileString("MONITOR_DOC","MIN_VALUE",LAST_MIN,TempFile);
// ShowString("保存监控范围MIN!");
::WritePrivateProfileString("COCLOR","COCLOR",LASTLINE_COLOR,TempFile);



ShowString("文件保存成功!");

Projectchang_flag = false;//保存以后置回FALSE
CFileFind MYPROJECTFIND;
if (MYPROJECTFIND.FindFile(Path))
{
CFile::Remove(Path);
}
MoveFile(TempFile, Path);//替换工程文件
ecfile(Path);//加密工程文件
return TRUE;
}
回复
LZNJ06 2011-11-02
大家帮看看啊,有没有相关的例程参考的,谢谢。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……