Прежде чем закончить разговор о меню, следует упомянуть еще об одной возможности, связанной с ними. Это акселераторные клавиши, или акселераторы. Акселераторные клавиши – клавиатурные комбинации, которые Вы можете определить и которые, будучи нажаты, автоматически выбирают соответствующие им команды меню даже в том случае, когда меню не активно и не отображается. Иначе говоря, при помощи акселератора можно выбирать соответствующий элемент меню, не обращаясь к самому меню. Термин акселератор является довольно точным, поскольку ввод команд с использованием таких клавиш осуществляется гораздо быстрее, чем активизация меню и выбор этих команд.
Для определения акселераторов необходимо добавить таблицу акселераторов в файл ресурсов. Все определения акселераторов имеют следующий общий вид:
ИмяТаблицы ACCELERATORS
{
Клавиша1, MenuID1 [,тип] [,параметр]
Клавиша2, MenuID2 [,тип] [,параметр]
Клавишаn, MenuIDn [,тип] [,параметр]
}
Здесь:
ИмяТаблицы | – является именем таблицы акселераторов; |
Клавиша | – определяет клавишу или комбинацию клавиш акселератора; |
MenuID | – это идентификатор элемента меню; |
Тип | – указывает, является ли клавиша стандартной (по умолчанию) или виртуальной (ниже это понятие будет определено); |
Параметр | – может быть одним из следующих макросов: NOINVERT, ALT, SHIFT и CONTROL. Наличие NOINVERT означает, что соответствующий элемент меню при использовании акселератора не будет подсвечен, даже если он присутствует на экране. Значение ALT указывает, что должна быть дополнительно нажата клавиша [Alt], а SHIFT и CONTROL специфицируют дополнительное нажатие клавиш [Shift] и [Ctrl]. |
Клавиша может быть символом в кавычках, либо целочисленным десятичным ASCII-кодом символа, либо виртуальной клавишей. Если указывается символ в кавычках, предполагается использование ASCII-символа. Если используется десятичное число, следует уточнить, что это код ASCII-символа, задав тип как ASCII. Если предполагается использование виртуальной клавиши, тип должен быть VIRTKEY.
Когда Клавиша представлена символом верхнего регистра в кавычках, соответствующая команда меню будет вызвана только в том случае, когда пользователь нажмет [Shift] вместе с указанной клавишей.
Если Клавиша представлена символом нижнего регистра, соответствующая команда меню будет вызвана только при нажатии заданной клавиши. В том случае, если Клавиша представлена символом нижнего регистра и задан параметр ALT, для вызова соответствующей команды необходимо нажать [Alt] и указанный символ, а если задан символ верхнего регистра и ALT, то для вызова команды нужно вместе с заданной клавишей нажимать [Shift] и [Alt]. Наконец, если требуется, чтобы для вызова команды использовалась комбинация [Ctrl+символ], символ в кавычках должен предваряться знаком ^.
Виртуальная клавиша – это системно-независимый код, определенный для основного набора служебных клавиш. Виртуальные клавиши включают определения функциональных клавиш [F1] ¸ [F12], стрелок и других не ASCII-клавиш. Они определены как макроимена в файле Windows.h. Все эти макроимена начинаются с VK_. Например, имена макросов для функциональных клавиш можно узнать из файла Windows.h. Для того чтобы использовать виртуальную клавишу как акселератор, нужно просто указать ее макроимя, а тип должен быть VIRTKEY. Можно также использовать ALT, SHIFT и CONTROL для задания соответствующих комбинаций клавиш.
Вот некоторые примеры:
"A", IDM_x // нажатие [Shift-A]
"a", IDM_x // нажатие а
"^А", IDM_x // нажатие [Ctrl-A]
"a", IDM_x, ALT // нажатие [Alt-A]
VK_F2, IDM_x // нажатие [F2]
VK_F2, IDM_x, SHIFT // нажатие [Shift-F2]
Вот как выглядит файл Menu.rc из предыдущего раздела с добавленной таблицей акселераторов:
// Пример файла ресурсов, описывающего меню
#include <Windows.h>
#include "Menu.h"
MYMENU MENU
{
POPUP "&Раз"
{
MENUITEM "&Альфа\tF2", IDM_ALPHA
MENUITEM "&Бета\tF3", IDM_BETA
}
POPUP "&Два"
{
MENUITEM "&Гамма\tShift+Г", IDM_GAMMA
POPUP "&Дельта"
{
MENUITEM "&Эпсилон\tCtrl+E", IDM_EPSILON
MENUITEM "&3ета\tCtrl+Z", IDM_ZETA
}
MENUITEM "&Эта\tCtrl+F4", IDM_ETA
MENUITEM "&Тэта\tF5", IDM_THETA
}
MENUITEM "&Помощь", IDM_HELP
}
// Определение акселераторов
MYMENU ACCELERATORS
{
VK_F2, IDM_ALPHA, VIRTKEY
VK_F3, IDM_BETA, VIRTKEY
"Г", IDM_GAMMA
"^Е", IDM_EPSILON
"^Z", IDM_ZETA
VK_F4, IDM_ETA, VIRTKEY, CONTROL
VK_F5, IDM_THETA, VIRTKEY
VK_F1, IDM_HELP, VIRTKEY
}
Заметьте, что названия элементов меню расширены и включают в себя названия акселераторов для вызова соответствующих команд. Каждый элемент отделяется от акселератора символом табуляции. Кроме того, включен файл Windows.h, поскольку в нем определены макроимена виртуальных клавиш.