Start with the project you created in Creating an empty vector.
Take the following steps to add vector load and save functionality:
1. |
Select View->ClassView. |
2. |
Right click on CTutorialDoc and select properties. |
3. |
In the properties window select Overrides shortcut. |
4. |
Select OnOpenDocument and add its function. |
5. |
Add the following code to CTutorialDoc::OnOpenDocument(): |
BOOL CTutorialDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
L_TCHAR szTemp[_MAX_PATH];
L_BOOL bRet;
L_INT nRet;
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
lstrcpy(szTemp, lpszPathName);
nRet = m_pVectorWindow->Load (szTemp);
if (nRet == SUCCESS)
{
m_pVectorWindow->EnableAutoScroll (TRUE);
m_pVectorWindow->Reset ();
}
else
{
CString strTmp;
strTmp.Format(TEXT("Error Loading File[%d]"), nRet);
AfxMessageBox(strTmp);
bRet = FALSE;
}
return bRet;
}
6. |
Select View->ClassView. |
7. |
Right click on CTutorialDoc and select properties. |
8. |
In the properties window select Overrides shortcut. |
9. |
Select OnSaveDocument and add its function. |
10. |
Code CTutorialDoc::OnSaveDocument() as follows: |
BOOL CTutorialDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
L_TCHAR szFileName[_MAX_PATH];
L_INT nRet = 0;
lstrcpy(szFileName, lpszPathName);
//Apply any transformation before the save
m_pVectorWindow->ApplyTransformation ();
nRet = m_pVectorWindow->Save ( szFileName, m_iFileSaveType);
if (nRet != SUCCESS)
{
CString strTmp;
strTmp.Format(TEXT("Error Saving File[%d]"), nRet);
AfxMessageBox(strTmp);
}
if (nRet == SUCCESS)
SetModifiedFlag(FALSE);
return (nRet == SUCCESS);
}
11. |
Click on the "Class View" tab, right-click CTutorialDoc, and choose "Add Variable..." |
12. |
For "Variable Type" enter |
L_INT
13. |
For "Variable Name" enter |
m_iFileSaveType
14. |
Leave "Access" as public and click "Finish" |
15. |
Select View->ClassView. |
16. |
In the Class Name drop down box, right click on CTutorialView and select properties. |
17. |
In the properties window select Events shortcut. |
18. |
Select ID_FILE_SAVE then command then add OnFileSave |
19. |
Add the following code to CTutorialView::OnFileSave () |
{
static const L_TCHAR szSaveFileFilter[] = TEXT("DXF(*.dxf)|*.dxf|WMF(*.wmf)|*.wmf|EMF(*.emf)|*.emf|DRW(*.drw)|*.drw|CGM(*.cgm)|*.cgm|PLT(*.plt)|*.plt|PCT(*.pct)|*.pct|Intergraph Vector(*.vec)|*.vec|TIF DXF(*.tif)|*.tif||");
L_UINT uNotUsed;
L_TCHAR szFileName[_MAX_PATH], *pszFileName;
L_INT nRet;
nRet = GetDocument()->m_pVectorWindow->GetFileName (szFileName, &uNotUsed);
pszFileName = (nRet == SUCCESS) ? szFileName : NULL;
CFileDialog SaveDialog(
FALSE,
TEXT("dxf"),
pszFileName,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szSaveFileFilter,
this
);
nRet = (L_INT)SaveDialog.DoModal();
if (IDOK == nRet)
{
CString strFilename;
strFilename = SaveDialog.GetPathName();
L_INT nIndex = SaveDialog.m_ofn.nFilterIndex;
switch (nIndex)
{
case 1:
GetDocument()->m_iFileSaveType = FILE_DXF;
break;
case 2:
GetDocument()->m_iFileSaveType = FILE_WMF;
break;
case 3:
GetDocument()->m_iFileSaveType = FILE_EMF;
break;
case 4:
GetDocument()->m_iFileSaveType = FILE_DRW;
break;
case 5 :
GetDocument()->m_iFileSaveType = FILE_CGM;
break;
case 6:
GetDocument()->m_iFileSaveType = FILE_PLT;
break;
case 7:
GetDocument()->m_iFileSaveType = FILE_PCT;
break;
case 8:
GetDocument()->m_iFileSaveType = FILE_INTERGRAPH_VECTOR;
break;
case 9:
GetDocument()->m_iFileSaveType = FILE_TIF_DXF;
break;
}
GetDocument()->OnSaveDocument(strFilename);
}
}
20. |
Select View->ClassView. |
21. |
In the Class Name drop down box, right click on CTutorialView and select properties. |
22. |
In the properties window select Events shortcut. |
23. |
Select ID_FILE_SAVE_AS then command then add OnFileSaveAs. |
24. |
Add the following code to CTutorialView::OnFileSaveAs () |
void CTutorialView::OnFileSaveAs()
{
OnFileSave();
}
25. |
Compile and run the project. You will be able to view, load and save vector files as you browse your local hard disk. You can also use the numeric key pad to zoom in (+ key) and zoom out (- key). |