Визуальное программирование и MFC



         

Сохранение и восстановление документов - часть 2


// Чтение данных из файла и запись их // в элементы класса документа. pDoc->OnOpenDocument(DlgOpen.GetPathName()); } }

В классе документа переопределить метод OnOpenDocument базового класса CDocument. Для этого в определении класса документа необходимо объявить виртуальный метод OnOpenDocument, а в реализации класса документа необходимо его определить:

BOOL CDoc::OnOpenDocument( const char* pszPathName) { // Вызов метода базового класса. // Он сначала вызывает метод DeleteContents для очистки документа, // а затем метод Serialize для чтения данных из файла if(!CDocument::OnOpenDocument(pszPathName)) return FALSE;

// Инициализация необходимых данных класса, выделение // памяти аналогично методу OnNewDocument . . . . . . .

status_new=FALSE; // документ не новый return TRUE; }

При помощи средства ClassWizard добавить в класс документа обработчики командных сообщений с идентификаторами ID_FILE_SAVE и ID_FILE_SAVE_AS. Изменить заготовки методов-обработчиков следующим образом:

void CDoc::OnFileSave() { if(status_new==TRUE) // если документ новый, то выбор имени файла { // Создание стандартной панели выбора файла "SaveAs" CFileDialog DlgSave(FALSE,(LPCSTR)"txt",GetTitle(), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, (LPCSTR)" Text Files (*.txt) |*.txt");

// Отображение стандартной панели выбора файла "SaveAs" if(DlgSave.DoModal()==IDOK) { SetPathName(DlgSave.GetPathName());

// Вызов метода базового класса. // Он вызывает метод Serialize для записи данных CDocument::OnSaveDocument(DlgSave.GetPathName());

status_new=FALSE; // документ уже не новый } } else // Вызов метода базового класса. CDocument::OnSaveDocument(GetPathName()); } void CDoc::OnFileSaveAs() { // Создание стандартной панели выбора файла "SaveAs" CFileDialog DlgSaveAs(FALSE,(LPCSTR)"txt",GetTitle(), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, (LPCSTR)" Text Files (*.txt) |*.txt");

// Отображение стандартной панели выбора файла "SaveAs" if(DlgSaveAs.DoModal()==IDOK) { SetPathName(DlgSaveAs.GetPathName());




Содержание  Назад  Вперед