Отчёт о лабораторной работе №2 «Разработка приложений с использованием библиотеки mfc» Преподаватель: Романенко С. А




Скачать 418.01 Kb.
НазваниеОтчёт о лабораторной работе №2 «Разработка приложений с использованием библиотеки mfc» Преподаватель: Романенко С. А
страница4/5
Дата публикации07.04.2013
Размер418.01 Kb.
ТипОтчет
odtdocs.ru > Военное дело > Отчет
1   2   3   4   5
^

Откомпилировать и выполнить пример Sketcher05


  1. Ознакомиться с возможностями сериализации контейнеров MFC (DECLARE_SERIAL, IMPLEMENT_SERIAL).

      • метод Serialize() потомков класса CObject обеспечивает чтение и запись атрибутов объекта.

      • макросы DECLARE_SERIAL, IMPLEMENT_SERIAL обеспечивают динамическое создание объектов в зависимости от контекста, читаемого из файла.

      • макросы DECLARE_SERIAL, IMPLEMENT_SERIAL не предназначены для случаев виртуального множественного наследования. Поэтому в данной реализации вся нагрузка по распознаванию типов читаемых элементов контейнера и созданию их ложится на метод Serialize(), обрабатывающий этот контейнер.

      • чтобы не привязывать реализацию контейнера к MFC, опишем этот метод в классе CSketcherDoc, содержащем контейнер:

void CSketcherDoc::Serialize(CArchive& ar)

{

if (ar.IsStoring())

{

ar << m_Color // Store the current color

<< m_Element // the current element type,

<< m_DocSize; // and the current document size

}

else

{

ar >> m_Color // Retrieve the current color

>> m_Element // the current element type,

>> m_DocSize; // and the current document size

}

serializeContainer(ar);

}
void CSketcherDoc::serializeContainer( CArchive& ar )

{

if (ar.IsStoring())

{

ar << _container->getRibbleCount();
Iterator<CElement>* iter = getNewIterator();

while (iter->hasNext())

{

Ribble<CElement>* current = iter->next();

// на NULL не проверяем, т.к. при нулевых вершинах

// восстановление графа чрезвычайно сложно.

// считаем такую ситуацию недопустимой!

Shape*

vertex = (Shape*)current->get__vertex1();
ar << vertex->get__id();

ar << vertex->getType();

vertex->Serialize(ar);
vertex = (Shape*)current->get__vertex2();
ar << vertex->get__id();

ar << vertex->getType();

vertex->Serialize(ar);

}

}

else

{

_container->clear();

int count;

using namespace std;

map<int, Shape*> shapes;

// получаем количество ребер

ar >> count;

while (count--)

{

try

{

_container->addRibble(

readShape(ar, shapes),

readShape(ar, shapes)

);

}

catch (CException* e1)

{

e1->ReportError();

}

catch (GraphException* e)

{

AfxMessageBox(e->getException().c_str());

}

}

_iter->first();

}

}
Shape* CSketcherDoc::readShape( CArchive &ar, map Shape*> &shapes )

{

int id;

ar >> id;
int shapeType;

ar >> shapeType;
// проверяем, нет ли уже такой фигуры в контейнере

Shape* toAdd = shapes[id];
if (toAdd == NULL)

{ // фигуры нет, создаем новую

switch(shapeType)

{

case RECTANGLE:

toAdd = Rectangle2::create();

break;

case OVAL:

toAdd = Oval::create();

break;

case TEXT:

toAdd = Text::create();

break;

case TEXT_IN_OVAL:

toAdd = TextInOval::create();

break;

default:

AfxMessageBox("Cannot read shape type, bad source file!");

return NULL;

break;

}

toAdd->Serialize(ar);

// запоминаем созданную фигуру по идентификатору,

// чтобы, если потребуется, создать еще ребра с ней

shapes[id] = toAdd;

}

else

{

toAdd->Serialize(ar);

}

return toAdd;

}
1   2   3   4   5

Похожие:

Отчёт о лабораторной работе №3 «Применение протоколов связи приложений...
На Visual Basic for Application написать макрос, который с помощью dde создает новую группу на рабочем столе и в ней новый программный...

Отчёт о лабораторной работе №4 «Разработка экспертной системы с использованием...
Провести создание нечеткой экспертной системы для определения размера чаевых. Провести проверку работы созданной системы

Отчёт о лабораторной работе №3 «Анализ операционных графовых моделей...
Для задачи обработки данных, рассматривавшейся в лабораторных работах 1-2, построить управляющий граф программы с нагруженными дугами,...

Отчет по лабораторной работе «проектирование печатного узла рэа»...
Целью лабораторной работы является разработка конструкторской документации узла рэа по заданной принципиальной схеме

Отчет по лабораторной работе «проектирование печатного узла рэа»...
Целью лабораторной работы является разработка конструкторской документации узла рэа по заданной принципиальной схеме

Отчёт о лабораторной работе №2 «Изучение понятия сопроцессов и виртуальных...
Написать программу, устанавливающую виртуальные связи между тремя сопроцессами на одном процессоре

Отчёт по лабораторной работе на тему «3d графика»
В данной лабораторной работе использовалась программа Autodesk 3ds Max 2009 и Adobe Photoshop cs4

Отчет по лабораторной работе №9 по курсу «компьютерная графика» Студент...
Вариант 28**: Забить пробный гвоздь в тестовую доску (прямоугольную в поперечном сечении)

Отчёт о лабораторной работе №2 «Анализ огм последовательных программ...
Для полученного графа построить соответствующую ему поглощающую цепь Маркова (пцм), определить ее фундаментальную матрицу(ФМ) и вектор...

Отчёт о лабораторной работе №2 «Анализ огм последовательных программ...
Для полученного графа построить соответствующую ему поглощающую цепь Маркова (пцм), определить ее фундаментальную матрицу(ФМ) и вектор...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
odtdocs.ru
Главная страница