Visual C++ MFC в подробностях - Организация клавиш акселераторов
ОГЛАВЛЕНИЕ
Организация клавиш акселераторов
Прототип: Имя таблицы ACCELERATORS
{
Key1, MenuID1, [тип], [опции]
Key2, MenuID1, [тип], [опции]
Key1, MenuID1, [тип], [опции]
и.т.д.
}
Имя таблицы - Определяет имя таблицы. Key - Задает клавишу выбора элемента меню. MenuID - Содержит идентификатор требуемого элемента. Тип - Определяет, является ли клавиша стандартной (значение по умолчанию) или виртуальной.
Опции:
- NOINVERT
- При нажатии клавиши быстрого доступа выделенный элемент меню не будет выделен другим цветом.
- ALT
- Дополнительно должна быть нажата клавиша ALT.
- SHIFT
- Дополнительно должна быть нажата клавиша SHIFT.
- CONTROL
- Дополнительно должна быть нажата клавиша CONTROL.
- ASCII
- Значение Key может быть либо символ в кавычках, либо ASCII-код клавиши (или виртуальной клавиши). Если задан символ в кавычках, то подразумевается, что это ASCII-символ. Если задано целое значение, то необходимо явно указать компилятору ресурсов, что это ASCII-код, определяя параметр тип равным ASCII.
- VIRTKEY
- Если вышеперечисленное относится к виртуальной клавише, то параметр тип должен иметь значение VIRTKEY.
Если в качестве параметра Key дана заглавная литера в кавычках, то соответствующий пункт меню будет выбран при одновременном нажатии указанной клавиши и клавиши SHIFT. Если указан строчный символ, то для выбора пункта меню достаточно нажать саму клавишу. При задании строчного символа и опции ALT, необходимо одновременно с символом нажать ALT. (Если указан заглавный символ и опция ALT, то дополнительно нужно будет нажать и ALT, и SHIFT.) И наконец, если пользователь должен нажимать клавишу CTRL, то перед символом нужно поставить знак ^. Все константы виртуальных клавиш определены в файле afxres.h и начинаются с префикса VK_. Ниже примеры
"A", IDM_x Выбор по нажатию [Shift-A]
"a", IDM_x Выбор по нажатию [a]
"^a", IDM_x Выбор по нажатию [Ctrl-a]
"a", IDM_x, ALT Выбор по нажатию [Alt-a]
VK_F2, IDM_x, VIRTKEY Выбор по нажатию [F2]
VK_F2, IDM_x VIRTKEY, SHIFT Выбор по нажатию [Shift-F2]
Пример создания: Создание меню и идентификаторов находится на другой стороне листа. Отличие в том, что в определения меню нужно добавить обозначения клавиш быстрого доступа.
Например:
MENUITEM "&Alpha", IDM_ALPHA а MENUITEM "&Alpha\tF2", IDM_ALPHA
Здесь \t - Это символ горизонтальной табуляции, а F2 - это подсказка в меню о горячей клавише.
MYMENU ACCELERATORS
{
VK_F2, IDM_ALPHA,VIRTKEY
VK_F3, IDM_BETA, VIRTKEY
"G", IDM_GAMMA
"^E", IDM_EPSILON
"^Z", IDM_ZETA
VK_F4, IDM_ETA, VIRTKEY,
VK_F5, IDM_THETA, VIRTKEY
VK_F1, IDM_HELP, VIRTKEY
"^T", IDM_TIME
}
Здесь "^T", IDM_TIME - не относится к меню, а в файл ID.H следует добавить идентификатор. Например:
#define IDM_TIME 500
Загрузка таблицы клавиш быстрого доступа происходит с помощью функции: CONTROL LoadAccelTable( ). Она имеет такой прототип:
BOOL CFrameWnd::LoadAccelTable(LPCSTR lpszName);
Вот загрузка в конструкторе окна:
if(!LoadAccelTable("MYMENU"))
MessageBox("Не могу загрузить акселераторы");