Лекция 10 |
Меню |
1 |
|
Л Е К Ц И Я |
1 0 |
СОЗДАНИЕ МЕНЮ ______________________________________________________________________ 1
Основные типы меню____________________________________________________________________ 1 Создание меню с помощью редактора меню ________________________________________________ 1 Атрибуты элементов меню _______________________________________________________________ 2 Подключение меню к окну приложения _____________________________________________________ 3 Файл ресурсов _________________________________________________________________________ 3 Создание обработчика событий для элемента меню__________________________________________ 4 Создание акселераторов (клавиш быстрого вызова) __________________________________________ 5 Загрузка акселераторов _________________________________________________________________ 6
МЕНЮ
Ничто не ценится так дорого пользователем и не стоит так дешево программисту, как меню.
Мигель Сервантес
Одной из основных проблем разработки пользовательского интерфейса любой программы является создание средства быстрого и удобного доступа ко всем командам, поддерживаемым данным приложением. Пользователи уже успели привыкнуть к тому, что для запуска большинства команд нужно выполнить несколько щелчков мышью. Кроме того, они хотят, чтобы все команды были сосредоточены в одном месте.
Чтобы удовлетворить все эти требования, в Visual Studio предусмотрено специальное средство – редактор меню, с помощью которого можно быстро и удобно создать структуру меню разрабатываемой программы. Данное средство можно использовать и для создания строки меню для любой формы вашего приложения, а также контекстных (или всплывающих) меню. Как правило, все команды сгруппированы по логическим функциям (работа с файлами, редактирование, изменение режимов просмотра объектов и др.).
Основные типы меню
Обычно меню располагается в верхней части окна под полосой заголовка, и представляет собой словесные или символические элементы меню. Назначение элементов меню – выполнять определенные команды, путем посылки соответствующих сообщений в очередь приложения. Меню, расположенное под полосой заголовка окна, называется главным меню приложения.
Элементы меню могут иметь различные типы и содержать ряд модификаторов:
Акселератор |
(клавиша вызова) сообщает пользователю, что вместо вызова меню можно |
|
вызвать команду с помощью акселератора; |
Стрелка |
показывает, что при выборе данного элемента, появится подменю; |
Разделительная черта |
отделяет одну группу элементов от другой; |
Маркер |
означает, что данный параметр меню выбран; |
Многоточие |
сообщает пользователю о том, что при выборе данного элемента на экран |
|
будет выведен блок диалога; |
Полутоновая надпись |
говорит, что в текущем состоянии данный элемент меню недоступен; |
Знак подчеркивания |
означает, что данный элемент меню можно вызвать с помощью горячей |
|
клавиши, которая включает эту букву. Такие буквы называются |
|
мнемоническими. |
Каждое окно, имеющее заголовок, может иметь системное меню, которое вызывается щелчком левой кнопки мыши на пиктограмме, расположенной в левой части заголовка окна, и представляет собой ряд стандартных команд. В Windows системное меню появляется, если щелкнуть правой кнопкой мыши в полосе головка или на пиктограмме свернутого окна.
Windows предоставляет специальный тип меню, которое можно создавать в любом месте экрана. Такое меню называется контекстным или плавающим.
Создание меню с помощью редактора меню
Когда вы создаете одно или многодокументное приложение с помощью Application Wizard, то он автоматически добавляет в файл ресурсов стандартное меню. Если же его там нет или вы хотите добавить еще одно, то надо:
в главном меню Visual Studio выбрать меню Insert ► Resource... ;
Выжол Ю.А. |
Программирование на Visual C++ |
Лекция 10 |
Меню |
2 |
в диалоговом окне Insert Resource выберите пункт Menu и нажмите кнопку New.
Вфайл ресурсов автоматически добавится пустое меню. Чтоб сконструировать нужный вид меню, надо перейти на закладку ResourceView окна Workspace. Раскройте дерево ресурсов, а затем раскройте папку Menu.
Вконтекстном меню идентификатора меню выберите пункт Properties и в диалоговом окне Menu Properties:
выберите русский язык в качестве языка интерфейса;
измените идентификатор ресурса (в качестве префикса обычно используют IDR_ – IDentifier of Resource).
Дважды щелкните по строке идентификатора меню. Автоматически запустится редактор меню
Menu.rc:
Дважды щелкните на пустом прямоугольнике – появится окно атрибутов меню:
Изменить последовательность команд в меню можно путём перетаскивания строк в окне редактора меню.
Атрибуты элементов меню
Атрибуты, определяющие внешний вид и поведение строки меню, приведены ниже.
Separator |
горизонтальная разделительная линия для разбиения пунктов меню на группы; |
Checked |
при выводе на экран элемент меню отмечается слева галочкой; |
Pop-up |
элемент определяет подменю; |
Grayed |
элемент отображается серым цветом и находится в заблокированном состоянии; несо- |
|
вместим с атрибутом Inactive; |
Выжол Ю.А. |
Программирование на Visual C++ |
Лекция 10 |
|
Меню |
3 |
Help |
элемент выравнивается по правому краю меню |
|
|
Break |
этот атрибут может принимать одно из трех значений: |
|
|
|
None |
обычный элемент меню; |
|
|
Column |
для меню верхнего уровня элемент выводится с новой строки, |
|
|
|
для подменю – в новом столбце; |
|
ID |
Ваг |
дополнительный столбец подменю отделяется вертикальной линией |
|
идентификатор элемента меню; |
|
||
Caption |
текст, определяющий имя элемента меню; текстовая строка может содержать символы: |
||
|
& |
буква, перед которой стоит этот символ, будет подчеркнута; |
|
|
\t |
включает в строку символ табуляции; |
|
|
\а |
выравнивает текст по правой границе меню; |
|
Prompt |
текст, который будет отображаться в строке состояния и после знака \n в окне всплы- |
||
|
вающей подсказки; |
|
|
Inactive |
Элемент находится в заблокированном состоянии, но отображается обычным цветом |
Пункты меню верхнего уровня предназначены только для отображения соответствующих подменю и, как правило, не инициируют какие-либо события. Поэтому для них нет необходимости резервировать идентификатор. Кроме того, меню верхнего уровня не могут содержать горизонтальную разделительную линию (Separator).
Подключение меню к окну приложения
Для подключения меню к окну приложения нужно:
открыть диалоговое окно свойств диалогового окна Dialog Properties, к которому вы хотите подключить меню;
в поле со списком Menu выберите одно из меню созданное вами ранее.
Файл ресурсов
Все ваши действия при создании меню записываются в файле ресурсов (файл с расширением *.гс). Файл ресурсов недоступен в среде Visual Studio для просмотра и редактирования, но его можно открыть с помощью блокнота. Вот как выглядит текст в файле ресурсов, описывающий меню:
// Menu
IDR_MAIN_MENU MENU DISCARDABLE BEGIN
POPUP "Файл" BEGIN
MENUITEM "Открыть", IDM_OPEN
MENUITEM "Выход", IDM_EXIT END
END
Первая строка содержит параметр, который определяет способ хранения меню в оперативной памяти. Этот параметр может принимать следующие значения:
DISCARDABLE |
меню может быть удалено из памяти, если больше не используется; |
FIXED |
меню постоянно находится в памяти; |
LOADONCALL |
меню загружается при обращении к нему; |
MOVEABLE |
меню может перемещаться в другую область памяти; |
PRELOAD |
меню загружается при запуске программы. |
Вот текст, описывающий строку в поле Prompt, элемента меню (он также находится в файле ресурсов):
Выжол Ю.А. |
Программирование на Visual C++ |
Лекция 10 |
Меню |
4 |
// String Table |
|
|
STRINGTABLE DISCARDABLE |
|
|
BEGIN |
|
|
IDM_OPEN |
"Открыть файл \nОткрыть файл" |
|
IDM_SAVE |
"Сохранить файл \nСохранить файл" |
|
IDM_EXIT |
"Закрыть программу \nЗакрыть программу" |
|
END |
|
|
Просмотреть и отредактировать значение атрибута меню Prompt можно также в редакторе строковой таблицы:
Определение идентификаторов IDR_MAIN, IDM_OPEN и IDM_EXIT, находится в файле
resource.h и выглядит так: |
|
#define IDR_MAIN_MENU |
130 |
#define IDM_OPEN |
32771 |
#define IDM_SAVE |
32772 |
#define IDM_EXIT |
32773 |
Создание обработчика событий для элемента меню
Чтобы создать обработчик для элемента меню Open, воспользуемся ClassWizard. Для этого нажмите
Ctrl+W или выберите пункт меню View ► ClassWizard в Visual Studio.
Существует два способа создания обработчика событий: в классе меню и в классе диалогового окна.
Если обработчик создаётся в классе меню, то необходимо создать новый класс. Для этого нужно в диалоговом окне Adding a Class выбрать Create a new class. В этом случае возникает возможность подключать меню к разным диалоговым окнам с помощью соответствующих команд.
Если в вашей программе предполагается использовать меню только в одном диалоговом окне, то проще выбрать существующий класс диалогового окна. Для этого нужно в диалоговом окне Adding a Class выбрать Select an existing class, а в диалоговом окне Select Class – класс диалогового окна к которому вы хотите подключить меню.
В диалоговом окне MFC ClassWizard откройте вкладку Message Maps. Далее следует проделать следующие шаги:
из выпадающего списка Class name выберите имя класса диалогового окна, к которому вы хотите подключить меню, например CMenuDemoDlg;
из списка Object IDs выберите идентификатор пункта меню, для которого вы хотите создать обработчик, например IDM_FILE;
из списка Messages выберите COMMAND, дважды щелкнув на этой строчке, или, один раз щелкнув на строке COMMAND, нажмите кнопку Add Function... ;
впоявившемся диалоге задайте имя обработчика, если вас не устраивает предложенное по умолчанию;
всписке Member functions дважды щелкните на появившейся строчке или один раз щелкните на ней и нажмите кнопку Edit Code;
Выжол Ю.А. |
Программирование на Visual C++ |