Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 164

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 158 159 160 161 162 163 < 164 > 165 166 167 168 169 170 .. 204 >> Следующая

Добавление обработчика сообщения меню
Определим обработчик сообщения, получающий управление при выборе команды Format (или нажатии клавиш Ctrl+F). Запустите мастер ClassWizard, откройте вкладку Message Map и выберите имя класса CFontDemoDoc в списке Class Name, чтобы обработчик сообщений был добавлен в класс документа программы. В программе FontDemo выбор класса для обработки команды Format несколько произволен. Однако в реальных текстовых процессорах команда Format непосредственно воздействует на данные, сохраняемые в документе (а не на определенное представление документа или на приложение в целом). Поэтому рекомендуется обрабатывать команду с помощью класса документа.
Выберите идентификатор id_text_format для команды Format в списке Object IDs, затем выберите сообщение command в списке Messages и щелкните на кнопке Add Function..., чтобы задать обработчик сообщения. Примите имя функции OnTextFormat, заданное по умолчанию. Закройте диалоговое окно мастера ClassWizard, щелкнув на кнопке ОК (код в функцию OnTextFormat будет добавлен позже).
Изменение кода класса документа и представления
Внесем необходимые дополнения в код класса документа и класса представления для отображения диалогового окна и использования его данных при выводе текста в окне представления программы. Сначала добавим определения переменных в начало определения класса CFontDemoDoc в файле FontDemoDoc.h.
class CFontDemoDoc : public CDocument {
public:
BOOL m_Bold; BOOL m_Italic; int m_Justify; int m_Pitch; int m_Spacing; BOOL m_Underline;
// оставшаяся часть определения класса СFontDemoDoc ...
Эти переменные сохраняют значения параметров форматирования документа и соответствуют переменным класса диалогового окна с такими же именами. Добавьте строки инициализации этих переменных в класс CFontDemoDoc в файле DemoDoc.cpp.
CFontDemoDoc::CFontDemoDoc() {
// TODO: Здесь добавьте код конструктора
m_Bold = FALSE;
m_Italic = FALSE;
m_Justify = JUSTIFYJLEFT;
m_Pitch = PITCH_VARIABLE;
m_Spacing = 1;
mJDnderline = FALSE;
}
Здесь задается отображение текста без полужирного, курсивного или подчеркнутого начертаний с использованием шрифта с переменной шириной букв, выравниванием по левому краю и одинарным интервалом между строками.
В файл FontDemoDoc.cpp добавьте оператор include для файла заголовков Format.h, чтобы объявление класса диалогового окна было доступно в файле Font Demo Doc. срр.
// FontDemoDoc.cpp : реализация класса CFontDemoDoc //
#include "stdafx.h" #include "FontDemo.h"
#include "FontDemoDoc.h" #include "format.h"
Затем добавьте в функцию OnTextFormat, сгенерированную мастером ClassWizard, следующий фрагмент.
1111111111111111/11111111111111111111111111111111111111111111111 ii Другие функции класса CFontDemoDoc
void CFontDemoDoc::OnTextFormat() (
// TODO: Здесь добавьте собственный код обработчика
// объявление объекта класса диалогового окна: CFormat FormatDlg;
// инициализация переменных класса: FormatDlg.m_Bold = m_Bold; FormatDlg.m_Italic = m_Italic; FormatDlg.m_Justify = m_Justify; FormatDlg.m_Pitch = m_Pitch; FormatDlg.m_Spacing = m_Spacing; FormatDlg.m_Underline = m_Underline;
// отображение диалогового окна: if <FormatDlg.DoModal () == IDOK) {
// сохранение значений, установленных в диалоговом окне:
m_Bold = FormatDlg.m_Bold;
m Italic = FormatDlg.m_Italic;
m_Justify = FormatDlg.m_Justifу;
m_Pitch = FormatDlg.m_Pitch;
m_Spacing = FormatDlg.m_Spacing;
m_Underline = FormatDlg.m_Underline;
// перерисовка текста: UpdateAllViews (NULL); )
}
В добавленном коде создается экземпляр класса диалогового окна CFormat. Для модального диалогового окна этот объект обычно определяется как локальная переменная, удаляемая сразу после завершении функции, в которой она определена.
Затем значения переменных, сохраняющих информацию о форматировании, копируются в соответствующие объекты диалогового окна, чтобы текущие значения этих переменных использовались при первом его открытии. Вспомните: при первоначальном отображении диалогового окна MFC автоматически передает значения переменных объекта соответствующим элементам управления.
Далее вызывается функция DoModal класса CDialog, отображающая диалоговое окно. Пока оно открыто, функция DoModal не завершается. Если его закрыть, щелкнув на кнопке OK, то функция DoModal возвращает значение idok. В этом случае функция OnTextFormat передает новые значения переменных объекта диалогового окна обратно переменным объекта документа, а затем вызывает функцию UpdateAllViews, инициирующую перерисовку окна представления и передающую управление функции onDraw класса представления. (Вспомните: если диалоговое окно закрыть, щелкнув на кнопке OK, то MFC автоматически проверит содержимое поля Line Spacing и передаст текущее содержимое элементов управления обратно соответствующим переменным объекта диалогового окна.)
При нажатии кнопки Cancel функция DoModal возвращает значение IDCANCEL. В этом случае переменные объекта документа остаются неизменными, а MFC не проверяет и не сохраняет содержимое элементов управления.
Предыдущая << 1 .. 158 159 160 161 162 163 < 164 > 165 166 167 168 169 170 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100