|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.