if(rezult==IDOK)
{
Cser_dia_tabulDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!pDoc)
return;
pDoc->m_stroka=dlg1.str;
Invalidate();
}
// TODO: Add your command handler code here
}
В нем происходит копирование информации из элемента данных str класса Dlg в элемент данных m_stroka класса Cser_dia_tabul. Как уже было сказано, это нужно для того, чтобы осуществить сериализацию полученных результатов. Метод Serialize() класса Cser_dia_tabul не может непосредственно работать с элементом данных класса Dlg. Копирование происходит при нажатии кнопки Ok. О том, что она нажата, известно по результату работы метода DoModal() диалогового класса. Для работы с ней и с элементом данных str создан локальный объект dlg1 типа Dlg.
Чтобы вызвать элемент данных m_stroka класса Cser_dia_tabul, создан указатель pDoc.
8) Теперь нужно обеспечить вывод строки символов m_stroka на экран в клиентскую область. Как уже неоднократно сообщалось, для этого существует функция OnDraw().Мастер создал следующую её заготовку.
void Cser_dia_tabulView::OnDraw(CDC*/*pDC*/)
{
Cser_dia_tabulDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
Следует обратить внимание, что здесь уже создан указатель pDoc. Все, что нужно сделать, это в скобках указать имя указателя на класс CDC и вызвать функцию TextOut() для вывода на экран строки символов m_stroka. В результате функция принимает вид:
void Cser_dia_tabulView::OnDraw(CDC* pDC/*pDC*/)
{
Cser_dia_tabulDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
pDC->TextOutA(0,0,pDoc->m_stroka);
// TODO: add draw code for native data here
}
9) Заполнить функцию Serialize(). Для этого выбрать вкладку Class View, выделить класс Cser_dia_tabulDoc, из методов этого класса выбрать Serialize() и добавить в неё коды вывода на диск и чтения из него. Текст функции приведен ниже:
void Cser_dia_tabulDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar<<m_stroka;//Вывод m_strokaв файл на диск
// TODO: add storing code here
}
else
{
ar>>m_stroka;//чтение из файла
// TODO: add loading code here
}
}
10) Следует обеспечить очистку экрана при создании нового документа. Для этого выделить класс Cser_dia_tabulDoc, раскрыть метод OnNewDocument(). В него добавить обнуление строки символов m_stroka =””; а также функцию UpdateAllViews(NULL) . Она информирует все виды, связанные с документом, что этот документ был модифицирован и должно быть обновление всех видов программы новыми данными документа.
BOOL Cser_dia_tabulDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
m_stroka="";
UpdateAllViews(NULL);
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
Программа готовая.
3 Контрольные вопросы
1 Что такое сериализация и зачем она нужна?
2Как в приложении обеспечить табуляцию функции?
3 Как формируется строка результатов?
4 Как осуществляется сериализация результатов?
5 Как распознается выбор кнопки Ok?
6 Зачем используется локальный объект диалогового типа?
7 Какой вид имеет функция Serialize()?
8 В каких случаях создается локальный указатель на класс «Документ»?
9 Что происходит при выполнении функции UpdateAllViews(NULL)?
Список литературы
1 Айвор Хортон VISUAL C++ 2005 Базовый курс, «Диалектика», Москва*Санкт-Петербург*Киев , 2007г.
2 Сергеев А.П., Терен А.Н. Программирование в VISUAL C++ 2005 «Диалектика», Москва*Санкт-Петербург*Киев , 2006г.
3 С. Холзнер Visual C++ 6, «ПИТЕР», Санкт-Петербург* Москва*Харьков*Минск, 2001г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.