home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / C++-7 / DISK8 / MFC / SAMPLES / CHART / CHFILE.CP$ / chfile
Encoding:
Text File  |  1992-03-18  |  4.1 KB  |  192 lines

  1. // chfile.cpp : Defines the file input and output logic.
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and Microsoft
  9. // QuickHelp documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. //
  13.  
  14. #include "chart.h"
  15.  
  16. #include <commdlg.h>
  17.  
  18. /////////////////////////////////////////////////////////////////////////////
  19.  
  20. // LoadFile:
  21. // Load the named file.  Uses Foundation archive/serialization format.
  22. //
  23. int CChartWnd::LoadFile(const char* pName)
  24. {
  25.     CFile file;
  26.     
  27.     // The file has a title, so reset the UNTITLED flag.
  28.     //
  29.     m_bUntitled = FALSE;
  30.     
  31.     if (!file.Open(pName, CFile::modeRead))
  32.     {
  33.         MessageBox("Not able to open file.","Chart",
  34.             MB_ICONEXCLAMATION | MB_OK);
  35.         return FALSE;
  36.     }
  37.  
  38.     // Read the file into the buffer.
  39.     // If it fails, inform the user.
  40.     //
  41.  
  42.     if (m_pChartObject != NULL)
  43.     {
  44.         delete m_pChartObject;
  45.         m_pChartObject = NULL;
  46.     }
  47.  
  48.     // Set up a CArchive to serialize in the data.
  49.     CArchive ar(&file, CArchive::load);
  50.  
  51.     TRY
  52.     {
  53.         m_bChartSerializedOK = TRUE;
  54.         ar >> m_pChartObject;
  55.         ASSERT(m_pChartObject->m_bDirty == FALSE);
  56.     }
  57.     CATCH(CArchiveException, e)
  58.     {
  59.         MessageBox("Not able to read from file.", "Chart",
  60.             MB_ICONEXCLAMATION | MB_OK);
  61.  
  62.         m_bChartSerializedOK = FALSE;
  63.     }
  64.     AND_CATCH(CFileException, e)
  65.     {
  66.         MessageBox("Not able to read from file.", "Chart",
  67.             MB_ICONEXCLAMATION | MB_OK);
  68.  
  69.         m_bChartSerializedOK = FALSE;
  70.     }
  71.     END_CATCH
  72.  
  73.     ar.Close();
  74.     file.Close();
  75.  
  76.     return m_bChartSerializedOK;
  77. }
  78.  
  79.  
  80. // FileDlg:
  81. // Put up an open or save file dialog, collect response (passed back
  82. // via szFile parameter).  
  83. //
  84. BOOL CChartWnd::FileDlg( BOOL bOpen, int nMaxFile, LPSTR szFile)
  85. {
  86.     char szFilter[] = "Chart Files (*.cht)|*.cht||";
  87.     CFileDialog fileDialog(bOpen, "cht", szFile, OFN_HIDEREADONLY, szFilter);
  88.  
  89.     if (fileDialog.DoModal() == IDCANCEL)
  90.         return FALSE;
  91.     _fstrcpy(szFile, fileDialog.GetPathName());
  92.     return TRUE;
  93. }
  94.  
  95.  
  96.  
  97.  
  98. // ReadFile:
  99. // Prompt user for a filename and try to read in the contained chart.
  100. //
  101. #define FILENAMELEN 128
  102.  
  103. void CChartWnd::ReadFile()
  104. {
  105.    
  106.     // Set the length of the CString, m_szFileName, to the maximum 
  107.     // file length.  This prevents overwriting.
  108.  
  109.     // If there's no filename, the dialog was canceled.
  110.     //
  111.     if (!FileDlg(TRUE, FILENAMELEN, m_szFileName.GetBuffer(FILENAMELEN)))
  112.     {
  113.         return;
  114.     }
  115.  
  116.     // Reset the length of the CString, m_szFileName, to the actual
  117.     // length of the file name.
  118.  
  119.     m_szFileName.ReleaseBuffer();
  120.  
  121.     // Load file into this window.
  122.     //
  123.     LoadFile(m_szFileName);
  124. }
  125.  
  126. // SaveFile:
  127. // Prompt user for a save file name and write the chart to the file
  128. //
  129. void CChartWnd::SaveFile(BOOL bNewFileName)
  130. {
  131.     CFile file;
  132.  
  133.     // Set the length of the buffer to the maximum file length.  By
  134.     // doing this, possible memory overwriting is prevented.
  135.  
  136.     if (bNewFileName)
  137.     {   
  138.         if (m_bUntitled)
  139.         {
  140.             // set a default string if the filename has not
  141.             // been set.
  142.             m_szFileName = "chart.cht";
  143.         }
  144.  
  145.         if (!FileDlg(FALSE, FILENAMELEN, 
  146.             m_szFileName.GetBuffer(FILENAMELEN)))
  147.         {
  148.             return;
  149.         }
  150.     }
  151.  
  152.     // Have the m_szFileName "shrink" to the actual length of the
  153.     // file name.
  154.  
  155.     m_szFileName.ReleaseBuffer();
  156.  
  157.     ASSERT(m_szFileName != "");
  158.     m_bUntitled = FALSE;
  159.  
  160.     if (!file.Open(m_szFileName, CFile::modeCreate | CFile::modeWrite))
  161.     {
  162.         MessageBox("Not able to create file.", "Chart",
  163.             MB_ICONEXCLAMATION | MB_OK);
  164.         return;
  165.     }
  166.     
  167.     // Write out the contents of the buffer to the file.
  168.     // If this fails, inform the user.
  169.     //
  170.     CArchive ar(&file, CArchive::store);
  171.  
  172.     TRY
  173.     {
  174.         ar << m_pChartObject;
  175.     }
  176.     CATCH(CFileException, e)
  177.     {
  178.         MessageBox("Not able to write to file.", "Chart",
  179.             MB_ICONEXCLAMATION | MB_OK);
  180.     }
  181.     AND_CATCH(CArchiveException, e)
  182.     {
  183.         MessageBox("Not able to write to file.", "Chart",
  184.             MB_ICONEXCLAMATION | MB_OK);
  185.     }
  186.     END_CATCH
  187.  
  188.     ar.Close();
  189.     file.Close();
  190.     m_pChartObject->m_bDirty = FALSE;
  191. }
  192.