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

Обработчики сообщения bn_clicked приложения FontDemo

Идентификатор объекта

Тип элемента управления

Имя обработчика сообщения

IDC_BOLD

Флажок

OnBold

IDC_CENTER

Переключатель

OnCenter

IDC_FIXED

Переключатель

OnFixed

IDC_ITALIC

Флажок

OnItalic

IDC_LEFT

Переключатель

OnLeft

IDC_RIGHT

Переключатель

OnRight

IDC_UNDERLINE

Флажок

OnUnderline

IDC_VARIABLE

Переключатель

OnVariable

Если класс окна порождается от класса CView, то последний предоставляет обработчик сообщения WM_PAINT, вызывающий функцию CView::OnDraw() класса окна представления. Однако так как класс диалогового окна не порождается от класса CView, то перерисовку этого окна выполняет сама функция CWnd::OnPaint(). Обратите внимание: функция CWnd::OnPaint() должна создать объект контекста устройства, принадлежащий MFC-классу CPaintDC, а не классу CClientDC, используемому для создания объектов контекста устройства в других функциях.

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

Мы написали код, управляющий диалоговым окном Format при его отображении, но в процессе работы программы диалоговое окно не отображалось. Обычно в приложениях Windows диалоговые окна открываются командами меню. Исключением является приложение, в котором диалоговое окно является главным окном. Для добавления команды меню, открывающей диалоговое окно Format, выполните следующие действия

  1. Откройте окно редактора ресурса меню. выполнив двойной щелчок на идентификаторе IDR_MAINFRAME в узле Menu графа ресурсов.

  2. Создайте меню как на рис. 6.14, заменив надпись File на надпись &Text, удалив из этого меню все комнады,.кроме Exit и добавив команду с надписью &Format...\tCtrl+F. Определите идентификатор команды ID_TEXT_FORMAT.

  3. Если в процессе удаления команд меню был удален разделитель перед командой Exit, то вставьте его.

  4. Сохраните изменения в файле сценария ресурсов, выполнив команду FileSave All

  5. Чтобы при последующей работе с проектом (после его повторного открытия) в свойствах команд меню отображались введенные ранее идентификаторы, скорректируйте файл FontDemo.rc, заменив численное значение идентификатора команды &Format...\tCtrl+F на значение ID_TEXT_FORMAT, открыв этот файл в редакторе Notepad. Сохраните файл FontDemo.rc.

  6. Затем в таблицу горячих клавиш AcceleratorIDR_MAINFRAME добавьте комбинацию клавиш для команды Format. Используйте метод, описанный в предыдущих главах, определяя одинаковый идентификатор ID_TEXT_FОRMАТ и для команды Format, и для комбинации клавиш Ctrl+F.

  7. Когда ресурсы программы будут определены, сохраните результаты работы, выбрав команду Save All в меню File или щелкнув на кнопке Save All в стандартной панели инструментов Developer Studio.

Рис. 6.14. Меню Text программы FontDemo

  1. Постройте программу и протестируйте ее, выполнив команду DebugStart. Вы увидите главное окно программы с заданными командами меню. Команда Format не доступна, поскольку отсутствует обработчик командного сообщения. Окно приложения показано на рис. 6.15.

Определите обработчик сообщения, получающий управление при выборе в меню команды Format или нажатии клавиш Ctrl+F. Для этого выполните п. п. 9 — 13 задания 4.

  1. Откройте окно Class View и выберите класс CFontDemoDoc в списке классов, чтобы обработчик сообщений был добавлен в класс документа программы. В программе FontDemo выбор класса для обработки команды Format несколько произволен. Однако в реальных текстовых процессорах команда Format непосредственно воздействует на данные, сохраняемые в документе (а не на определенное представление документа или на приложение в целом). Поэтому рекомендуется обрабатывать команду с помощью класса документа.

  2. Откройте окно Properties. Щелкните на кнопке Events (с изображением молнии) и раскроется список идентификаторов команд. Выберите идентификатор ID_TEXT_FORMAT, соответствующий команде меню TextFormat….. В списке сообщений выберите сообщение COMMAND и команду <Add> OnTextFormat. В файл заголовка класса документа добавится объявление функции CFontDemoDoc::OnTextFormat(), в файл реализации класса документа добавится ее шаблон.

  3. В функцию CFontDemoDoc::OnTextFormat() добавьте код, в котором создайте экземпляр класса диалогового окна CFormatDlg и вызовите функцию CDialog::DoModal() для открытия модального диалогового окна. Для модального диалогового окна этот объект обычно определяется как локальная переменная, удаляемая сразу после завершения функции, в которой она определена.

void CFontDemoDoc::OnTextFormat() { // TODO: Add your command handler code here CFormatDlg m_FormatDlg; m_FormatDlg.DoModal (); }

  1. Добавьте в файл FontDemoDoc.cpp реализации класса документа директиву препроцессора для включения файла заголовков FormatDlg.h, содержащего интерфейс класса диалогового окна, в его реализацию, чтобы можно было использовать константы с номерами переключателей и соответствующие стили.

#include "stdafx.h" #include "FontDemo.h" #include "FontDemoDoc.h" #include "FormatDlg.h"

  1. Постройте программу и протестируйте ее.

Вы увидите окно, в котором команды меню Text доступны. Щелчок на команде Format отображает на экране диалоговое окно. Выбор переключателей и установка флажков приводят к отображению в области Sample образца текста.

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