Организация клавиш акселераторов

Прототип: Имя таблицы 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_xVIRTKEY, 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_TIME500

Загрузка таблицы клавиш быстрого доступа происходит с помощью функции: CONTROL LoadAccelTable( ). Она имеет такой прототип:

BOOL CFrameWnd::LoadAccelTable(LPCSTR lpszName);

Вот загрузка в конструкторе окна:

 if(!LoadAccelTable("MYMENU"))
MessageBox("Не могу загрузить акселераторы");
 
« Предыдущая статья   Следующая статья »