Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
16.02.2016
Размер:
7.08 Mб
Скачать

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.

Соседние файлы в папке VC++Баженова