Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Сериализация нестандартных обьектов
Допустим мы создали класс CData который включает в себя: строку - обьект dataклассаCString,а также методы для работы с этой строкой. Нам неходимо реализовать сериализацию обьектов этого класса.
1. При помощи AppWizard Создайте новую однодокументную (SDI) программу с именем serializer. 2. Выполните в VisualC++ команду File -> New, в открывшемся диалоговом окне перейдите на вкладку Files, затем добавьте в проект новый файл, указав имя которого как CData.h.
3. Включите в созданый файл приведенный ниже програмный код: class CData: public CObject { private: CString data; DECLARE_SERIAL(CData); public: CData(){data = CString("");} void AddText(CString text){data += text;} void DrawText(CDC* pDC){pDC->TextOut(0, 0, data);} void ClearText(){data = "";} void Serialize(CArchive& archive); } Для того обеспечения сериализации обьектов данного класса необходимо: - описать данный класс как производный от класса MFC CObject; - включить в определения данного класса макрос Visual C++ DECLARE_SERIAL, который обьявляет методы, используемые в процессе сериализации; - переопределить метод Serialize() класса CObject; 4. Добавте в проект новый файл CData.cpp, который нам будет необходим для переопределения метода Serialize() класса Cobject. 5. Включите в созданый файл приведенный ниже програмный код: #include “stdafx.h” #include “serializerDoc.h”
void CData::Serialize(CArchive& archive) { //Вызов метода Serialize() базового класса CObject CObject::Serialize(archive); //Сериализация обьекта data принадлежащегоклассу CData if (archive.IsStoring()) { archive << data; } else { archive >> data; } } //Добавляем макрос, который обеспечивает сериализацию нашего обьекта при помощи //дополнительных методов IMPLEMENT_SERIAL(CData, CObject, 0)
6. Включите в заголовочный файл документа (serializerDoc.h) ссылку на новый файл (чтобы документ мог взаимодействовать с классом CData) и создать обьект класса CData с именем DataObject: // serializerDoc.h интерфейс класса CSerializerDoc // ////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "CData.h" . . . class CSerializerDoc : public CDocument { . . . //Атрибуты public: CData DataObject; . . . } 7. Для сериализации обьекта DataObject следует вызвать его метод Serialize() внутри метода Serialize() документа (класс CSerializerDoc): void CSerializerDoc::CSerializerDoc(CArchive& ar) { DataObject.Serialize(ar); } 8. Для сохранения вводимых пользователем символов необходимо связать сообщение WM_CHAR с методом OnChar() и затем добавьте код для сохранения вводимых символов в обьекте DataObjectкласса CData:
void СSerializerView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { CSerializerDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); //Вызов метода класса CData, который сохраняет вводимые символы в обьекте data pDoc-> DataObject.AddText(CString(nChar)); Invalidate();
CView::OnChar(nChar, nRepCnt, nFlags); }
9. Для вывода содержымого обьекта DataObject воспользуемся методом класса CData – DrawText(), вызывая его в методе OnDraw() класса СSerializerView:
void CSerializerView::OnDraw(CDC* pDC) { CSerializerDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
pDoc-> DataObject.DrawText(pDC); }
В результате, прграмма serializer дает возможность сохранять вводимые пользователем данные и загружать их. Вот и все! Программа готова к работе.
Дата добавления: 2015-06-30; просмотров: 198; Нарушение авторских прав Мы поможем в написании ваших работ! |