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

       

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

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

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

В операционной системе 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).

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

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

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

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


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