Лабораторная работа №18 по VISUALC++ 2005
«Сериализация нестандартных объектов при работе с файлами »
1 Задание
Создать и выполнить однодокументное Windows-приложение на «родном» C++ с использованием библиотеки MFC. Предусмотреть создание пользователем нестандартного т.е. собственного класса. В нем предусмотреть элемент данных типа CString. В свою очередь, включить объект этого класса в качестве элемента данных в класс документа. Обеспечить процесс сериализации документа. То есть в конкретном случае нужно обеспечить чтение строки символов , запись её на диск и последующее чтение из диска.
2 Общие указания
Сериализация – процесс записи на диск или чтения из него. В предыдущей лабораторной работе была рассмотрена сериализация объектов стандартных классов. Теперь предположим в проекте, названном My, мы создали свой собственный класс CDog, производный от класса CObject. В нем элемент данных m_porodaи методы : vvod() – ввод данных, vivod() – вывод на экран, clear() – очистка экрана. Объект класса CDog является элементом данных класса «Документ» (конкретно созданного мастером класса CMYDoc). Нужно обеспечить процесс занесения документа на диск и чтения из него.
1) Создаем приложение My .
Create project. Тип проекта MFC, шаблон - MFC Application, Name – My. Single document. Выключить Use Unicode libraries.
2) Добавим в него класс Dog. Для этого в меню Project выбрать Add Class. В открывшемся окне выбрать категорию MFC и шаблон MFC Class. Щелкнуть по Add. Раскроется диалоговое окно. Ввести Class name –CDog. В строке Base Class вместо уже имеющегося по умолчанию базового класса CWnd установить CObject. Следует заметить, что одновременно мастером создаются файлы Dog.h и Dog.cpp ( без буквы «С» впереди). Щелкнуть по Finish.
3) Включить в класс CDog элемент данных m_poroda и методы. Для этого выбрать вкладку Class View, раскрыть папки My и Classes, выделить класс CDog, вызвать контекстное меню и в нем Add/ Add Variable. В окне ввести public: CString m_poroda. Затем, вызывая Add/Add Function, вести методы класса CDog:
void vvod(CString ch)
{
m_poroda+=ch;
}
void vivod (CDC*pDC)
{
pDC->TextOutA(0,10, m_poroda);
}
void clear()
{
m_poroda=””;
}
4) Включить в класс CMyDoc элемент данных public: CDog about_dog. Нужно выделить класс CMyDoc и ввести указанный элемент.
5) Теперь создадим обработчик OnChar() нажатия клавиши. Для этого выделить класс CMyView. В его properties раскрыть messages. Из раскрывшегося списка выбрать WM_CHAR, раскрыть список. В нем будет <Add>OnChar(). Щелкнуть на этой строке. В результате появится заготовка обработчика OnChar().
Поскольку требуется ввести породу собаки, в функции OnChar() нужно вызвать метод vvod() класса |CDog. Для этого нужен объект этого класса. Такой объект есть. Это about_dog. Напомним, что он является элементом данных класса CMyDoc. А значит, чтобы его использовать, нужен указатель CMyDoc*pDoc. Адрес в него будет занесен с помощью функции GetDocument().
Текст функции OnChar() приведен ниже.
void CMyView::OnChar(UINT nChar, UINT nRepCnt,
UINT nFlags)
{
CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!pDoc)
return;
pDoc->about_dog.vvod(CString((char)nChar));
Invalidate();//Не забывать!!!
pDoc->SetModifiedFlag();//Для появления вопроса //сохранять или нетновые данные
// TODO: Add your message handler code here and/or call default
CView::OnChar(nChar, nRepCnt, nFlags);
}
Чтобы при выходе из программы появлялся вопрос сохранять новые данные или нет, используется метод SetModifiedFlag().
Для вывода на экран, как известно, используется функция OnDraw(). Выделим класс CMyView и в нем - этот метод. Добавим в него строку вывода
pDoc->about_dog.vivod(pDC);
Текст функции имеет вид:
void CMyView::OnDraw(CDC*pDC /*pDC*/)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
pDoc->about_dog.vivod(pDC);
// TODO: add draw code for native data here
}
При создании нового документа нужно очистить экран.
Для этого в имеющуюся заготовку метода OnNewDocument() класса CMyDoc нужно добавить две строки,выделенные курсивом.
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.