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

Прототип: Имя таблицы 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("Не могу загрузить акселераторы");

Материал прислал Dmitry (astra@mail.iks.ru)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 18.01.2000