Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Сериализация нестандартных обьектов

Допустим мы создали класс 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 дает возможность сохранять вводимые пользователем данные и загружать их. Вот и все! Программа готова к работе.

 


<== предыдущая страница | следующая страница ==>
Сериализация стандартных обьектов | Когда пользователь нажимает кнопку “Записать и прочесть файл”, программа записывает верхнюю строку в файл data.dat, затем считывает ее из файла и выводит в нижнем текстовом поле

Дата добавления: 2015-06-30; просмотров: 198; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.003 сек.