9
Разработка меню
Visual C++ позволяет разрабатывать и использовать различные типы меню:
• главное меню приложения;
• системное меню;
• контекстное меню.
Строка меню располагается в верхней части окна под строкой заголовка окна и называется линейкой меню. Каждый пункт меню называется элементом меню.
Создавать меню можно различными способами:
• на основе шаблона ресурса меню (или просто шаблона меню), разработанного в редакторе меню;
• при помощи класса CMenu, инкапсулирующего средства создания и управления элементами меню.
Создание меню из шаблона ресурса меню
Разработка меню приложения, основанная на шаблоне меню, состоит из нескольких этапов:
• создание шаблона ресурса меню в редакторе меню;
• определение всех элементов меню и связывание с ними обработчиков команд меню;
• определение мнемонических ключей (отображаемых подчеркнутыми), инициирующих выполнение элементов меню;
• определение подсказок, отображаемых в строке состояния при выборе пользователем элемента меню;
• определение клавиш-акселераторов, инициирующих выполнение элементов меню;
• добавление кнопок на панель инструментария, инициирующих выполнение элементов меню;
• указание ресурса меню в шаблоне документа (при использовании АррWizard этот этап выполняется автоматически).
Для того чтобы автоматически подключить ресурс меню при использовании шаблона документа в приложениях с SDI и MDI интерфейсом, достаточно, чтобы идентификатор ID ресурса меню совпадал с идентификатором, указанным в параметрах шаблона документа. |
Редактор меню
Если приложение создавалось с помощью AppWizard как приложение с SDI или MDI интерфейсом, то оно уже содержит шаблон ресурса меню. Для его редактирования следует выполнить двойной щелчок мышью на идентификаторе ресурса меню - будет вызван редактор меню.
Для добавления нового меню в разрабатываемое приложение следует выполнить InsertjResourse и выбрать в открывшемся диалоговом окне ресурс Menu.
По умолчанию новое добавленное меню получит идентификатор IDR_MENU1.
Для создания нового пункта меню или нового раскрывающегося меню следует в окне редактора меню щелкнуть мышью на создаваемом элементе (рамка следующего элемента всегда присутствует в окне редактора меню) и начать ввод заголовка элемента меню. Автоматически будет открыто диалоговое окно свойств определяемого элемента меню (рис. 9.1).
Рис. 9.1. Окно свойств элемента меню
В окне свойств элемента меню можно указать текст отображаемой в строке состояния подсказки для данного элемента меню, изменить автоматически формируемый идентификатор элемента меню (за исключением элементов линейки меню и заголовков элементов для подменю), ввести заголовок элемента меню.
При определении заголовка меню можно использовать символ &, который должен предшествовать символу, определяемому как мнемонический ключ данного элемента меню.
Переключатель Separator позволяет определить элемент меню, являющийся разделителем в раскрывающемся меню.
Переключатель Checked позволяет указать, будет ли элемент меню первоначально отмечен (символом S).
При включенном переключателе Pop-up элемент меню формируется как открывающий подменю. По умолчанию этот переключатель включен (равен True) для всех элементов меню из линейки меню, а для всех остальных элементов меню этот переключатель выключен.
Переключатель Grayed позволяет указать, что данный элемент меню первоначально будет недоступен и отображен "посеревшим".
Из раскрывающегося списка Break можно выбрать одно из следующих значений (влияющих только на отображение элемента меню во время выполнения, а не в редакторе меню): None (по умолчанию); Column - элемент отображается на новой строке (для элемента линейки меню) или в новом столбце без разделительной линии между столбцами (для элемента раскрывающегося меню); Ваг - элемент отображается на новой строке или отделяет новый столбец вертикальной линией.
На рис. 9.2 приведено меню, автоматически создаваемое AppWizard при генерации проекта SDI или MDI приложения.
Рис. 9.2. Автоматически созданное меню SDI-приложения
Редактор клавиш-акселераторов
Клавишами-акселераторами называются клавиатурные комбинации, выполняющие быстрый запуск как обработчиков соответствующих команд меню, так и других методов.
Для того чтобы использовать клавиши-акселераторы, следует: • вызвать редактор клавиш-акселераторов (щелкнув мышью на идентификаторе ресурса меню в секции Accelerator вкладки ресурсов в окне проекта) (рис. 9.3);
Рис. 9.3. Вкладка Resource окна проекта
• выбрать из имеющегося списка уже существующий или ввести в конце таблицы новый элемент;
• в открывшемся (автоматически для нового элемента или по двойному щелчку мыши для существующего элемента) диалоговом окне свойств (рис. 9.4) выбрать или ввести новый идентификатор ID элемента меню. Для определения значения клавиш-акселераторов следует:
• выбрать в раскрывающемся списке ID идентификатор элемента меню или ввести новый идентификатор;
• выбрать значение из раскрывающегося списка Key или щелкнуть по командной кнопке Next Key Typed и нажать на создаваемую клавишу-акселератор;
• определить на панели клавиш-модификаторов Modifiers, какие из указанных переключателями клавиш будут входить в создаваемую клавиатурную комбинацию.
Рис. 9.4. Окно определения клавиш-акселераторов элемента меню
Таким образом, для того чтобы при работе с меню приложения можно было выполнять команду, назначенную элементу меню, нажатием мнемонического ключа при распахнутом меню, следует задать этот символ в заголовке элемента меню после символа &. А для использования вместо выбора элемента меню вызов команды, назначенной этому элементу меню, через нажатие клавиш-акселераторов следует определить их в редакторе клавиш акселераторов.
Для автоматической загрузки таблицы клавиш-акселераторов при использовании шаблона документа достаточно, чтобы ID таблицы клавиш-акселераторов совпадал с ID, указанным в шаблоне документа.
Также таблицу клавиш-акселераторов можно загрузить из файла ресурсов вызовом метода CFrmWnd::LoadAccelTable.