Лабораторная работа № 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!