Лабораторная работа № 4. Работа с пунктами меню и панелью инструментов
Цель: получить навыки по созданию пунктов меню и кнопок панели инструментов.
Теоретическая часть
При создании приложения с использованием библиотеки Microsoft Foundation Classes ( MFC) предполагает соблюдение определенной структуры программы. Структура программы MFC включает две основные сущности: документ и представление.
Документ - это имя, присвоенное коллекции данных приложения. Документ определяется как объект класса MFC CDocument, в который добавляются переменные для хранения данных, и функции, для обработки данных[5].
Представление относится к определенному объекту документа. Представление- это объект, предлагающий механизм отображения данных, которые хранятся в документе. Он определяет, как данные отображаются в окне и как пользователь может взаимодействовать с ними. Программист определяет собственный класс представления, который является наследником класса CView MFC.
Структура EXE - файла для Windows такова, что в его конец могут быть записаны некоторые данные, совершенно не зависящие от самой программы. Они называются ресурсами. Ресурсы могут редактироваться совершенно раздельно, хотя находятся в том же файле, где код и данные. При загрузке программы на выполнение, ресурсы обычно не загружаются в память, а это делается лишь по запросу от программы. В ресурсах программа может хранить любые данные, какого угодно размера. Но есть стандартные типы ресурсов, такие как иконки, битовые образы, курсоры, диалоги, меню[4].
|
|
Одно - и многодокументные приложения на базе MFC уже содержат меню. Для отображения пунктов меню приложения и редактирования выберите в панели Resource View (Окне ресурсов) вкладку Menu. В этой вкладке определены два основных меню: IDR_ MAINFRAME и IDR_ NamePrType (рисунок 4.1). Первое меню отображается в случае, когда в приложении не открыты документы, иначе – второе меню.
Рисунок 4.1 – Окно редактора меню
Для редактирования меню дважды щелкните на идентификаторе меню. Для добавления пункта меню нужно в рамке с текстом «Прототип для текста» (Type Here) введите имя. Если ввести символ амперсанда (&) перед буквой в имени пункта меню, то эта буква будет «горячей клавишей». Например, ввод имени «О&кружность» позволит выбрать данный пункт меню комбинацией клавиш «Alt+к». Двойной щелчок ЛК мыши на данном пункте меню отображает его свойства (рисунок 4.2).
Рисунок 4.2 - Свойства пункта меню
Измените название идентификатора на осмысленное обозначение. Также рекомендуется ввести значение свойства «Приглашение» (Prompt), которое будет отображаться в строке состояния, когда пункт меню будет подсвечен.
Для добавления обработчика события пункта меню, щелкните ПК мыши на пункте меню и выберите «Добавить обработчик события» (Add Event Handler)(рисунок 4.3).
|
|
Рисунок 4.3 - Диалоговое окно добавления обработчика событий
Мастер добавления обработчика события пункта меню позволяет обрабатывать сообщения двух типов:
- COMMAND – сообщения, которые генерируются при выборе пункта меню;
- UPDATE_ COMMAND_ UI – сообщения, которые генерируются, когда меню должно быть обновлено.
Выбор класса, в котором будет реализован обработчик события, во много зависит от функций данного пункта. В основном используются либо класс документа или представления.
Ниже представлен пример обработчика события типа COMMAND в классе документа:
void Cmfc2Doc::OnElementCircle()
{
// TODO: добавьте свой код обработчика команд
m_Element=CIRCLE;
}
В карте сообщений определяется связь между идентификатором и обработчиком сообщения:
BEGIN_MESSAGE_MAP(Cmfc2Doc, CDocument)
ON_COMMAND(ID_Color_Red, &Cmfc2Doc::OnColorRed)
ON_COMMAND(ID_Color_Black, &Cmfc2Doc::OnColorBlack)
ON_COMMAND(ID_Color_Green, &Cmfc2Doc::OnColorGreen)
ON_COMMAND(ID_Element_Circle, &Cmfc2Doc::OnElementCircle)
ON_COMMAND(ID_Element_Rectangle, &Cmfc2Doc::OnElementRectangle)
ON_COMMAND(ID_Element_Curve, &Cmfc2Doc::OnElementCurve)
END_MESSAGE_MAP()
В карте сообщения указывается тип сообщения, идентификатор элемента и обработчик данного события.
|
|
4.1.2 Добавление кнопок панели инструментов
Для отображения панели инструментов приложения и редактирования выберите в панели Resource View (Окне ресурсов) вкладку Toolbar. Рассмотрим два элемента из этой вкладки: IDR_ MAINFRAME и IDR_ MAINFRAME_256. Первый определяет 16-цветные пиктограммы, которые отображаются при выборе панели инструментов с маленькими пиктограммами, а второй -24-битные большие.
Выберите идентификатор IDR_ MAINFRAME_256 и двойным нажатием ЛК мыши откройте окно редактора. Внешний вид редактора пиктограмм представлен на рисунке 4.4.
Рисунок 4.4 – Окно редактора пиктограмм
Выберите последний элемент для формирования пиктограммы нового элемента. Данную кнопку можно передвигать в пределах панели, удерживая нажатой ЛК мыши. При помощи панели инструментов, которая представлена на рисунке 4.5, нарисуйте свой рисунок.
Рисунок 4.5 - Панель инструментов
В редакторе свойств измените идентификатор кнопки на идентификатор пункта меню, например, ID_ Element_ Line. Это свяжет между собой пункт меню и данную кнопку.
Рисунок 4.6 - Выбор идентификатора
Добавьте всплывающие подсказки. Для этого перейдите в редакторе панели инструментов к нужной пиктограмме и в свойстве «Приглашение» наберите текст подсказки, предваряя символом «\n».
|
|
Рисунок 4.7 - Редактирование подсказки кнопки панели инструментов
В результате появится кнопка на панели инструментов программы, связанная с пунктом меню.
Задание
1. Создать SDI-приложение, которое содержит меню с основными пунктами «Элементы» и «Цвет». Данные пункты содержат подпункты, которые определятся в таблице 4.1.
2. Создать соответствующие выше приведенным пунктам меню кнопки панели инструментов.
Таблица 4.1 – Варианты заданий
№ | Элементы | Цвет | № | Элементы | Цвет |
1 | Круг, линия | Красный, синий | 9 | Круг, кривая | Синий, зеленый |
2 | Круг, линия | Красный, зеленый | 10 | Круг, кривая | Синий, красный |
3 | Круг, линия | Красный, черный | 11 | Круг, кривая | Синий, черный |
4 | Круг, линия | Красный, желтый | 12 | Круг, кривая | Синий, желтый |
5 | Прямоугольник, линия | Красный, синий | 13 | Прямоугольник, кривая | Синий, зеленый |
6 | Прямоугольник, линия | Красный, зеленый | 14 | Прямоугольник, кривая | Синий, красный |
7 | Прямоугольник, линия | Красный, черный | 15 | Прямоугольник, кривая | Синий, черный |
8 | Прямоугольник, линия | Красный, желтый | 16 | Прямоугольник, кривая | Синий, желтый |
Порядок выполнения работы
1. Создайте новый проект на основе шаблона «Приложение MFC».
2. Выставьте следующие параметры проекта, как показано на рисунке 4.8.
Рисунок 4.8 - Выбор типа приложения
3. Остальные параметры оставим без изменений. Нажмите кнопку «Готово» и запустите компиляцию программы (F7) и её запуск Ctrl+F5.
4. Добавьте свои пункты меню. Для этого переходим в окно ресурсов (Resource View) и выбираем следующие элементы: mfc2.rc->Menu. Дважды щелкаем ЛК мыши на элемент IDR_ MAINFRAME.
5. В позицию «Прототип текста(Type Here) »введите название пункта меню. Создайте пункты меню «Элементы» и «Цвет» согласно номеру варианта из таблицы 4.1.
Рисунок 4.9 – Окно редактора меню
6. Создайте обработчики событий меню. Обработчики будут реализованы в классе документа. Выделите нужный пункт меню и нажмите ПК мыши. В контекстном меню выберите пункт «Добавить обработчик событий(Add Event Handler)».
Рисунок 4.10 - Добавление обработчика события
7. В появившемся окне выбираем тип сообщения «COMMAND», а в списке классов – класс документа. Нажмите кнопку «Добавить/править» (рисунок 4.11). В результате в классе Cmfc2 Doc появится код следующего вида:
void Cmfc2Doc::OnColorRed()
{
// TODO: добавьте свой код обработчика команд
}
Рисунок 4.11 - Выбор параметров обработчика события
8. Добавим в класс Cmfc2 Doc переменную m_ Color типа COLORREF:
class CDoc : public CDocument
{ protected: // создать только из сериализации
Cmfc2Doc();
………………………………………………………….
public:
afx_msg void OnColorRed();
protected:
COLORREF m _ Color ;
};
10. Щелкнете правой кнопкой на папке «Файлы заголовка» на вкладке «Обозреватель решений» и выберите в контекстном меню «Добавить-Добавить новый элемент». Введите имя файла mfc2Constants, который будет хранить константы проекта. В файле введите следующий текст:
#include "windows.h"
enum ElementType{LINE, RECTANGLE, CURVE};
const COLORREF BLACK=RGB(0,0,0);
const COLORREF RED=RGB(255,0,0);
const COLORREF GREEN=RGB(0,255,0);
const COLORREF BLUE=RGB(0,0,255);
12. Добавьте в файл mfc2.h строку #include " mfc2Constants .h";
13. Добавьте код инициализации конструктору класса:
Cmfc2Doc:: C mfc2Doc ()
{
m_Element=LINE;
m_Color=BLACK;
}
14. Добавьте код в обработчике событий элементов меню, например:
void Cmfc2Doc::OnColorRed()
{
m_Color=RED;
}
void Cmfc2Doc::OnElementCircle()
{
m_Element=CIRCLE;
}
15. Запустите программу и проверьте её работоспособность;
16. Для отметки пунктов меню нужно создать обработчики вида UPDATE_ COMMAND_ UI. Обработчики сообщений данного типа используются для обновления свойств пункта меню перед их отображением. Рассмотрим пример. Перейдите в «Окно ресурсов» и выбрать пункт меню «Цвет»-«Красный». Нажав ПК мыши, вызвать контекстное меню и создать обработчик команды обновления пункта меню (рисунок 4.12).
Рисунок 4.12 - Обработчик события обновления пункта меню
17. Напишите код обработчика. Ниже приведен пример кода обработчика события обновления пункта меню «Красный»:
void Cmfc2Doc::OnUpdateColorRed(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_Color==RED);
}
Добавленный оператор вызывает функцию SetCheck, которая помечает пункт меню, если её параметр true. В данном случае пункт меню «Цвет»-«Красный» будет помечен, если значение переменной m_ Color будет равен значению RED.
18. Подобным образом сделайте обработчики для следующих пунктов меню «Цвет». Запустите программу на выполнение и проверьте, что галочки устанавливаются правильно. Пример результата работы программы представлен на рисунке 4.13.
Рисунок 4.13 - Результаты работы программы
19. Подобным образом сделайте обработчики событий для пункта меню «Элемент». Запустите программу на выполнение и проверьте её работу. Пример результата работы программы представлен на рисунке 4.14.
Рисунок 4.14 - Результаты работы программы
20. Создайте разработанным выше пунктам меню кнопки на панели инструментов. Возможный вариант реализации представлен на рисунке 4.15.
Рисунок 4.15 - Результаты работы программы
21. Составьте отчет по работе и ответьте на контрольные вопросы.
Контрольные вопросы
1. В чем особенность приложений вида «Документ-представление»?
2. Дайте понятие ресурса.
3. Какие сообщения относятся к типу UPDATE_ COMMAND_ UI?
4. Как назначить «горячую клавишу» на пункт меню?
Дата добавления: 2019-09-13; просмотров: 404; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!