Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
System programming / Конспект лекций / Лекция 9 Ресурсы часть 3.doc
Скачиваний:
44
Добавлен:
08.05.2015
Размер:
49.15 Кб
Скачать

Лекция 9 Ресурсы (быстрые клавиши)

Добавление интерфейса клавиатуры

Быстрые клавиши (keyboard acce­lerators) — это комбинации клавиш, которые генерируют сообщения WM_COMMAND (в некоторых случаях WM_SYSCOMMAND). Чаще всего быстрые клавиши используются в программах для дублирования действий обычных опций меню. (Однако быстрые клавиши могут выполнять и такие функции, которых нет в меню.) Например, в некоторых программах для Windows имеется меню Edit, которое включает в себя опцию Delete; в этих программах для этой опции быстрой клавишей обычно является клавиша <Del>. Пользователь может выбрать из меню опцию Delete, нажимая <Alt>-комбинацию, или может просто нажать быструю клавишу <Del>. Когда оконная процедура получает сообщение WM_COMMAND, то ей не нужно определять, что именно, меню или быстрая клавиша, использовались.

Для многооконных приложений с множеством оконных процедур быстрые клавиши очень важны. Как известно, Windows посылает сообщения клавиа­туры оконной процедуре того окна, которое в данный момент имеет фокус ввода. Однако, в случае быстрых клавиш Windows посылает сообщение WM_COMMAND той оконной процедуре, чей описатель задан в функции TranslateAccelerator. Как правило, это будет оконная процедура главного окна вашей программы, т. е. того окна, в котором имеется меню. Следовательно, нет необходимости дублировать логику действия быстрых клавиш в каждой оконной процедуре.

Это преимущество становится особенно важным при использовании немо­дальных окон диалога или дочерних окон, расположенных в рабочей области вашего главного окна. Если при наличии нескольких окон для перемещения между окнами назна­чается определенная быстрая клавиша, то только одна оконная процедура должна включать в себя эту логику. Дочерние окна не получают от быстрых клавиш сообщений WM_COMMAND.

Некоторые правила назначения быстрых клавиш

Теоретически можно определить быструю клавиши почти для каждой вирту­альной или символьной клавиши в сочетании с клавишами <Shift>, <Ctrl> или <Alt>. Однако надо попытаться добиться какого-то соответствия с другими приложениями и избегать применения тех клавиш, которые ис­пользует Windows. Нежелательно назначать быстрыми клавишами клавиши <Tab>, <Enter>, <Esc>, <Spacebar>, поскольку они часто используются для системных функций.

Другой известной быстрой клавишей является клавиша <F1> для вызова подсказки. Избегайте применения клавиш <F4>, <F5> и <F6>, поскольку они часто используются для специальных функций многооконного интер­фейса приложений (Multiple Document Interface, MDI).

Таблица быстрых клавиш

Быстрые клавиши определяются в файле описания ресурсов (файл с расши­рением .RC). Здесь показана общая форма определения:

MyAccelerators ACCELERATORS

{

[определения быстрых клавиш]

}

Эта таблица быстрых клавиш называется MyAccelerators. В таблицу ACCELERATORS не включаются опции загрузки и памяти. В файле описа­ния ресурсов можно иметь несколько таблиц ACCELERATORS.

Для каждой определяемой быстрой клавиши необходима отдельная строка таблицы. Имеется четыре типа определений быстрых клавиш:

"char", id [,<SHIFT>] [,CONTROL] [,<ALT>]

"^char", id [,<SHIFT>] [,CONTROL] [,<ALT>]

nCode, id, ASCII [,<SHIFT>] [,CONTROL] [,<ALT>]

nCode, id, VIRTKEY [,<SHIFT>] [,CONTROL] [,<ALT>]

В этих примерах "char" означает один символ, заключенный в кавычки, а "^char" — это символ ^ и один символ, заключенный в кавычки. Число id выполняет ту же функцию, что и идентификатор меню в определении меню. Это значение, которое Windows посылает вашей оконной процедуре в сооб­щении WM_COMMAND для идентификации быстрой клавиши. Обычно эти идентификаторы определяются в заголовочном файле. Быстрые клави­ши почти всегда служат для выбора опций из всплывающих меню. Если быстрая клавиша дублирует команду меню, используйте один и тот же идентификатор для меню и для быстрой клавиши. Если быстрая клавиша не дублирует команду меню, используйте уникальный идентификатор.

В первом типе определения идентификатора быстрая клавиша — это чувст­вительный к регистру символ в кавычках:

"char", '' id [,<SHIFT>] [,CONTROL] [,<ALT>]

Если вы хотите использовать эту клавишу в сочетании с одной или более клавишами <Shift>, <Ctri> и <Alt>, просто добавьте SHIFT, CONTROL и/или ALT.

В определении второго типа быстрая клавиша — это символ в сочетании с клавишей <Ctrl>:

"^char", id [,<SHIET>] [.CONTROL] [,<ALT>]

Этот тип определения эквивалентен первому, если бы в нем за символом было бы указано ключевое слово CONTROL.

В определениях третьего и четвертого типов вместо символа в кавычках используется число (nCode):

nCode, id, ASCII [,<SHIFT>] [.CONTROL] [,<ALT>]

nCode, id, VIRTKEY [,<SHIFT>] [.CONTROL] [,<ALT>]

Это число интерпретируется либо как чувствительный к регистру ASCII-код символа, либо как код виртуальной клавиши, в зависимости от наличия ключевого слова ASCII или VIRTKEY.

Наиболее часто используются определения быстрых клавиш второго и четвертого типа. В определении второго типа буквенная клавиша использу­ется в сочетании с клавишей <Ctrl>. Например, здесь определяется быстрая клавиша <Ctrl>+<A>:

'"^A", id

Определение четвертого типа используется для виртуальных кодов клавиш, таких как функциональные клавиши. Для комбинации <Ctri>+<F9> ис­пользуется следующее определение:

VK_F9, wid, VIRTKEY, CONTROL

Идентификатор VK_F9 определяется в заголовочных файлах Windows в качестве виртуального кода клавиши <F9>, поэтому, вы должны включить в программу в начале файла описания ресурсов инструкцию:

#include <windows.h>

Приведенные выше определения первого и третьего типов применяются редко. Если вы хотите их использовать, внимательно контролируйте чувст­вительность к регистру. Windows осуществляет чувствительный к регистру контроль совпадения "char" или nCode, основываясь на нажатой клавише. Если вы добавляете ключевое слово SHIFT, Windows контролирует, нажата или нет клавиша <Shift>. Эта ситуация иногда приводит к неожиданному результату. Например, если "char" — это "А", то быстрая клавиша срабатыва­ет, если нажата клавиша <А> или при нажатой клавише <Shift> или при включенном режиме Caps Lock. Если вы используете "А" с ключевым словом SHIFT, то быстрая клавиша активизируется, если нажата клавиша <А> при нажатой клавише <Shift>, но не должна вызываться при включенном режи­ме Caps Lock. Точно также "а" сама по себе является быстрой клавишей для клавиши <А> нижнего регистра или для клавиши <А> с нажатой кла­вишей <Shift> и включенном режиме Caps Lock. Но "о" с ключевым словом SHIFT является быстрой клавишей только в одном случае, если клавиша <Shift> нажата, a Caps Lock включен.

При определении быстрых клавиш для пунктов меню необходимо включить описание комбинации быстрых клавиш в текст соответствующего пункта меню. Символ табуляции (\t) разделяет текст и описание быстрой клавиши ^ так, чтобы описание быстрых клавиш располагалось во втором столбце. При наличии слов Shift, Ctrl или Alt после них пишется знак плюс и собственно клавиша. Например:

• F6

• Shift+F6

• Ctri+F6