Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
161-192.doc
Скачиваний:
2
Добавлен:
11.11.2019
Размер:
358.91 Кб
Скачать

Задание 5. Отображение текста в окне представления в соответствии с выбранными в диалоговом окне атрибутами

Мы поставили задачу получить в окне представления строки, отформатированные в соответствии с установками, выбранными в диалоговом окне, после его закрытия нажатием кнопки OK. Внесите необходимые дополнения в код класса документа и класса представления. Это необходимо для использования данных объекта документа при выводе текста в окне представления программы.

  1. Добавьте определения переменных в интерфейс класса CFontDemoDoc в файле FontDemoDoc.h. Для этого можно воспользоваться окном редактора кода и внести соответствующие объявления с клавиатуры. Можно вызвать мастер Add Member Variable Wizard для добавления переменных-членов класса CFontDemoDoc по команде контекстного меню AddAdd  Variable… и повторить действия параграфа «Определение класса диалогового окна и добавление переменных-членов». В результате в файл FontDemoDoc.h добавятся следующие строки.

// FontDemoDoc.h : interface of the CFontDemoDoc class class CFontDemoDoc : public CDocument { //объявления атрибутов и методов //. . . public: afx_msg void OnTextFormat(); bool m_Bold; bool m_Italic; bool m_Underline; int m_Justify; int m_Pitch; int m_Spacing; };

  1. Добавленные переменные сохраняют значения параметров форматирования документа и соответствуют переменным класса диалогового окна с такими же именами. Если вы добавляли переменные с помощью мастера Add Member Variable Wizard, то в конструкторе класса документа появился список инициализации этих переменных. Измените значения, которыми инициализируются переменные в конструкторе класса CFontDemoDoc в файле FontDemoDoc.cpp, заменив нулевые значения переключателей значениями, которые в примере выделены полужирным шрифтом.

CFontDemoDoc::CFontDemoDoc() : m_Bold(false) , m_Italic(false) , m_Underline(false) , m_Justify(JUSTIFY_LEFT) , m_Pitch(PITCH_VARIABLE) , m_Spacing(1) { // TODO: add one-time construction code here }

  1. Измените функцию CFontDemoDoc::OnTextFormat(). В окне редактора кода добавьте операторы, которые копируют данные о форматировании из переменных объекта документа в переменные объекта диалогового окна, с которыми они связаны. Это необходимо для использования текущих значений переменных при первом открытии диалогового окна. Вызовите функцию CDialog::DoModal() для отображения диалогового окна. Если его закрыть, щелкнув на кнопке OK, то функция CDialog::DoModal() возвращает значение IDOK. В этом случае функция CFontDemoDoc::OnTextFormat() должна передать новые значения переменных объекта диалогового окна обратно переменным объекта документа, а затем вызвать функцию CDocument::UpdateAllViews(), инициирующую перерисовку окна представления. При нажатии кнопки Cancel функция CDialog::DoModal() возвращает значение IDCANCEL. В этом случае переменные объекта документа остаются неизменными, а MFC не проверяет и не сохраняет содержимое элементов управления. В приведенном коде закомментированы строки первоначального варианта функции

void CFontDemoDoc::OnTextFormat() { // TODO: Add your command handler code here CFormatDlg m_FormatDlg; // m_FormatDlg.DoModal (); // инициализиолвать переменные-члены класса диалога: m_FormatDlg.m_Bold = m_Bold; m_FormatDlg.m_Italic = m_Italic; m_FormatDlg.m_Justify = m_Justify; m_FormatDlg.m_Pitch = m_Pitch; m_FormatDlg.m_Spacing = m_Spacing; m_FormatDlg.m_Underline = m_Underline; // отобразить диалоговое окно: if (m_FormatDlg.DoModal () == IDOK) { // сохранить значения, установленные в диалоговом окне: m_Bold = m_FormatDlg.m_Bold; m_Italic = m_FormatDlg.m_Italic; m_Justify = m_FormatDlg.m_Justify; m_Pitch = m_FormatDlg.m_Pitch; m_Spacing = m_FormatDlg.m_Spacing; m_Underline = m_FormatDlg.m_Underline; // перерисовать текст: UpdateAllViews (NULL); } }

  1. Функция CDocument::UpdateAllViews() инициирует перерисовку окна представления и передает управление функции CFontDemoView::OnDraw() класса представления. Получив управление, функция OnDraw()класса CFontDemoView перери -

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]