Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Операционная система Windows 95 для программиста

© Александр Фролов, Григорий Фролов
Том 22, М.: Диалог-МИФИ, 1993, 271 стр.

[Назад] [Содеожание] [Дальше]

7.6. Орган управления Hot Key

Последний орган управления, который мы рассмотрим в этой книге, предназначен для ввода комбинации клавиш активизации приложения. Однако прежде мы должны немного рассказать о том, что это такое.

Пользователь может определить комбинацию клавиш для быстрого доступа к какой-либо часто выполняемой операции. Такую комбинацию клавиш мы будем называть комбинацией клавиш активизации или просто клавишами активизации .

В операционной системе Microsoft Windows 95 вы можете установить так называемую глобальную комбинацию клавиш для активизации при помощи сообщения WM_SETHOTKEY , послав его главному окну приложения. Заметим, что сообщение WM_SETHOTKEY не имеет никакого отношения к органу управления Hot Key .

Параметр lParam этого сообщения должен быть равен нулю. Клавиши активизации задаются параметром lParam следующим образом:

wParam = (WPARAM)MAKEWORD (vkey, modifiers);

Здесь vkey определяет виртуальный код клавиши. Список виртуальных кодов для различных клавиш вы найдете в пятой главе 12 тома "Библиотеки системного программиста" (стр. 158).

Параметр modifiers определяет клавиши модификации, такие как <Ctrl> и <Alt>, которые нужно нажимать вместе с клавишей, заданной параметром vkey для активизации. Параметр modifiers нужно задавать как комбинацию следующих значений:

Значение Клавиша модификации
HOTKEYF_ALT <Alt>
HOTKEYF_CONTROL <Ctrl>
HOTKEYF_EXT Дополнительные клавиши, такие как правая клавиша <Ctrl> или правая клавиша <Alt>. Дополнительные клавиши есть не на всех клавиатурах
HOTKEYF_SHIFT <Shift>

Ниже мы показали, как задать комбинацию <Ctrl+Alt+V> в качестве клавиш активизации:

SendMessage(hWnd, WM_SETHOTKEY, 
 (WPARAM)MAKEWORD('V', HOTKEYF_ALT | HOTKEYF_CONTROL), 0); 

Что же произойдет, когда пользователь нажмет клавиши активизации, заданные таким образом?

Главное окно приложение будет выдвинуто на первый план, а его функция получит сообщение WM_SYSCOMMAND с кодом команды SC_HOTKEY . При этом обработчик сообщения WM_SYSCOMMAND может выполнить какие-либо действия, например, послать главному окну приложения другое сообщение.

Ниже мы привели исходный текст обработчика сообщения WM_SYSCOMMAND из приложения UpDown:

void WndProc_OnSysCommand(HWND hwnd, UINT cmd, int x, int y)
{
  if(cmd == SC_HOTKEY)
  {
    SendMessage(hwndMainWindow, WM_COMMAND,
     (WPARAM)MAKELONG(ID_FILE_OPTIONS, 0), 0L);
    return 0;
  }
  return FORWARD_WM_SYSCOMMAND (hwnd,cmd,x,y,DefWindowProc);
}

Здесь обработчик посылает главному окну сообщение WM_COMMAND, имитируя выбор из меню File строки Options.

С помощью сообщения WM_SETHOTKEY пользователь может назначить для приложения только одну комбинацию клавиш активизации.

Приложение может определить, была ли назначена окну комбинация клавиш активизации и если была, то какая именно. Для этого достаточно послать окну сообщение WM_GETHOTKEY , например, так:

wHotKey = (WORD)SendMessage(hwndMainWindow,WM_GETHOTKEY,0,0); 

Если комбинация клавиш активизации не была назначена, возвращается значение NULL, а если была, то возвращается значение, которое можно использовать в качестве параметра wParam сообщения WM_SETHOTKEY.

Итак, для того чтобы определить комбинацию клавиш активизации, можно воспользоваться сообщением WM_SETHOTKEY. Что же касается подготовки значения wParam для этого сообщения, то это можно сделать с помощью органа управления Hot Key, к описанию которого мы и перейдем.

Внешне орган управления Hot Key похож на однострочный текстовый редактор (рис. 7.8).

Рис. 7.8. Окно органа управления Hot Key

Когда это окно получает фокус ввода, пользователь может нажимать комбинацию клавиш активизации, которая тотчас же будет в нем отображаться. Таким образом, пользователь сразу видит, какая комбинация клавиш выбрана.

Послав окну органа управления Hot Key сообщение HKM_GETHOTKEY , приложение может определить выбранную комбинацию клавиш и передать значение, возвращенное функцией SendMessage как параметр wParam сообщению WM_SETHOTKEY.

Этот нехитрый механизм позволяет легко организовать процедуру определения пользователем комбинации клавиш активизации.

Создание органа управления Hot Key

Вы можете создать орган управления Hot Key функцией CreateWindowEx на базе предопределенного класса окна HOTKEY_CLASS , либо добавить его к диалоговой панели, выбрав соответствующую пиктограмму из палитры редактора диалога. Например:

hwndHotKey = CreateWindowEx( 
 0, HOTKEY_CLASS, "", WS_CHILD | WS_VISIBLE,
 30, 50, 100, 32, hWnd, NULL, hInst, NULL); 

В приложении UpDown мы выбрали второй способ.

Сообщения для органа управления Hot Key

Инициализацию органа управления Hot Key выполняют с помощью сообщения HKM_SETHOTKEY . Параметр lParam должен быть равен нулю, а параметр wParam следует определить следующим образом:

wParam = MAKEWORD (vkey, modifiers);

Параметры vkey и modifiers имеют то же назначение, что и в сообщении WM_SETHOTKEY.

Кроме этого, при инициализации с помощью сообщения HKM_SETRULES можно указать запрещенные комбинации клавиш и клавиши, которые используются по умолчанию.

Параметры сообщения HKM_SETRULES приведены ниже:

wParam = (WPARAM) fwInvalid; 
lParam = MAKELPARAM (modifiers, 0);

Параметр fwInvalid указывает запрещенные клавиши и может быть комбинацией следующих значений:

Значение Запрещенные клавиши
HKCOMB_A <Alt>
HKCOMB_C <Ctrl>
HKCOMB_CA <Ctrl + Alt>
HKCOMB_NONE Запрещается использовать клавиши без модификаторов, т. е. без клавиш <Alt>, <Ctrl> или <Shift>
HKCOMB_S <Shift>
HKCOMB_SA <Shift + Alt>
HKCOMB_SC <Shift + Ctrl>
HKCOMB_SCA <Shift + Ctrl + Alt>

Когда пользователь пытается определить запрещенную комбинацию клавиш, вместо нее будет выбрана та, что указана параметром modifiers.

[Назад] [Содеожание] [Дальше]