Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Сериализация стандартных обьектов
Лабораторная работа № 8 «Работа с файлами»
Указания к выполнению лабораторной работы
Сериализация Это процесс записи или чтения некоторого обьекта с носителя информации. В большинстве программ на Visual C++ вся работа с данными происходит в документах, поэтому этот урок будет ориентирован на работу с обьектом документа. Вам предстоит создать приложение writer которое будет записывать на диск введенную в клиентской части программы строку, а затем по требованию пользователя загружать ее из файла. Сериализация стандартных обьектов
Создание программы writer При помощи AppWizard создайте однодокументное (SDI) приложение с именем writer: 1. Добавьте код, который позволит приложению получать и отображать вводимые пользоавтелем символы. Эти данные будут храниться в обьекте StringData класса CString, который принадлежит документу:
//writerDoc.h : интерфейс класса CWriterDoc . . . class CWriterDoc : public CDocument { protected: //создание только при сериализации CWriterDoc(); DECLARE_DYNCREATE(CWriterDoc)
//Атрибуты public: CString StringData;
2. Обьект StringData необходимо инициализировать пустой строкой в конструкторе документа: CWriterDoc::CWriterDoc() { StringData = “”; }
3. При помощи ClassWizard свяжите сообщение WM_CHAR с методом OnChar() и затем добавьте код для сохранения вводимых символов в обьекте StringData:
void CWriterDoc:: OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { CWriterDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDoc->StringData += nChar; Invalidate();
CView::OnChar(nChar, nRepCnt, nFlags); }
4. Чтобы вводимые пользователем символы отображались в клиентской части программы, добавьте в метод OnDraw следующий фрагмент:
void CWriterView::OnDraw(CDC* pDC) { CWriterDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
pDC->TextOut(0, 0, pDoc->StringData); }
Теперь программа получает символы от пользователя, отображает их в окне и сохраняет в обьект StringData. Следующий этап решения поставленной задачи заключается в том, чтобы пользователь мог сохранить данные программы и загрузить их с диска. Сериализация обьекта StringData Класс документа (файл writerDoc.h) содержит встроенный метод Serialize(), который необходимо изменить следующим образом:
void CWriterDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { //код сохранения ar << StringData; } else { // код загрузки ar >> StringData; } }
В этом методе происходит сериализация обьекта StringData. Для этого методу Serialize() передается ссылка на обьект ar класса CArchive, причем работа с обьектом ar практически не отличается от работы с потоками cout и cin. В этом методе мы вызываем метод IsStoring() обьекта ar, чтобы узнать, был метод вызван для записи или для чтения, затем выполняются операции для сохранения или загрузки данных с диска. На этом сериализация обьекта StringData окончена. Если пользователь захочет выйти из программы, не сохранив данные, программа должна вывести сообщение, а вернее предложение сохранить изменения в документ. Для этого необходимо сообщить приложению о том, что данные были изменены, это достигается простым вызовом метода класса CDocument - SetModifiedFlag(), в котором устанавливается флаг изменения документа: void CWriterView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { CWriterDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
pDoc->StringData += nChar; Invalidate(); pDoc->SetModifiedFlag();
CView::OnChar(nChar, nRepCnt, nFlags); }
Вот и все! Программа готова к работе.
Дата добавления: 2015-06-30; просмотров: 155; Нарушение авторских прав Мы поможем в написании ваших работ! |