对已打开正在编辑的文件进行保存:
void CTestView::OnMenuSavemxdfile()
{
VARIANT_BOOL vbReadOnly;
//判断是否只读
m_ipMapDoc->get_IsReadOnly(m_bstrDocName,&vbReadOnly);
if(vbReadOnly == VARIANT_FALSE)
{
//如果文件不为只读,则进行保存
m_ipMapDoc->Save(true,true);
}
else
SaveAsMxd(); //否则把文件另存
}
把打开的文件进行另存:
BOOL CTestView::SaveAsMxd()
{
//另存mxd文件
CFileDialog fileDlg(FALSE,"mxd",NULL,OFN_EXPLORER|OFN_HIDEREADONLY,
"mxd文件(*.mxd)|*.mxd||",NULL);
if(fileDlg.DoModal()!=IDOK)
return FALSE;
CComBSTR bstrName,bstrMapDocName,bstrPass="";
bstrName = fileDlg.GetPathName();
VARIANT_BOOL bVal=TRUE;
IMxdContentsPtr ipMxdContents(m_MapControl.GetMap());
IMapDocumentPtr ipMapDoc(__uuidof(MapDocument));
ipMapDoc = m_ipMapDoc;
IActiveViewPtr ipActiveView(m_MapControl.GetMap());
ipMapDoc->ReplaceContents(ipMxdContents);
ipMapDoc->SaveAs(bstrName,bVal,bVal);
return TRUE;
}
打开已经存在的MXD文件:
BOOL CTestView::LoadMxdFile()
{
//打开mxd文件
CFileDialog fileDlg(TRUE,NULL,NULL,OFN_EXPLORER|OFN_HIDEREADONLY,
"mxd文件(*.mxd)|*.mxd||",NULL);
if(fileDlg.DoModal()!=IDOK)
return FALSE;
CString strName;
strName = fileDlg.GetPathName();
CComBSTR mxdFileName,bstrPass="";
mxdFileName = strName;
IMapDocumentPtr ipMapDoc(__uuidof(MapDocument));
ipMapDoc->Open(mxdFileName,bstrPass);
ipMapDoc->get_Map(0,&m_ipMap);
m_ipMapControl->putref_Map(m_ipMap);
m_ipMapDoc = ipMapDoc;
m_bstrDocName = mxdFileName;
return TRUE;
}
自己建立新的MXD文件:
BOOL CTestView::NewMxdFile()
{
//新建mxd文件
CFileDialog fileDlg(FALSE,"mxd",NULL,OFN_EXPLORER|OFN_HIDEREADONLY,
"mxd文件(*.mxd)|*.mxd||",NULL);
if(fileDlg.DoModal()!=IDOK)
return FALSE;
m_MapControl.ClearLayers();
CComBSTR bstrName;
bstrName = fileDlg.GetPathName();
IMapDocumentPtr ipMapDoc(__uuidof(MapDocument));
ipMapDoc->New(bstrName);
m_bstrDocName = bstrName;
IMxdContentsPtr ipMxdC(m_MapControl.GetMap());
IActiveViewPtr ipActiveView(m_MapControl.GetMap());
ipMapDoc->ReplaceContents(ipMxdC);
ipMapDoc->Save(true,true);
m_ipMapDoc = ipMapDoc; //赋给成员变量备用
return TRUE;
}