Аппаратные сообщения

Когда пользователь нажимает клавишу, Windows помещает либо сообщение WM_KEYDOWN, либо сообщение WM_SYSKEYDOWN в очередь сообщений окна, имеющего фокус ввода. Когда клавиша отпускается, Windows помещает в очередь сообщений либо сообщение WM_KEYUP, либо сообщение WM_SYSKEYUP.

Итак,

  • Несистемные аппаратные сообщения – это сообщения WM_KEYDOWN и WM_KEYUP, а системные - WM_SYSKEYDOWN и WM_SYSKEYUP.

Системные аппаратные сообщения WM_SYSKEYDOWN и WM_SYSKEYUP более важны для Windows, чем для приложений.

  • Эти сообщения обычно вырабатываются при нажатии клавиш в сочетании с клавишей <Alt>. Эти сообщения вызывают опции меню программы или системного меню, или используются для системных функций, таких как смена активного приложения (<Alt+Tab>).

Программы обычно игнорируют сообщения WM_SYSKEYDOWN и WM_SYSKEYUP и передают их в функцию DefWindowProc. Оконная процедура, в конце концов, получает другие сообщения, являющиеся результатом этих аппаратных сообщений клавиатуры (например, выбор меню).

При необходимости же включить в код программы инструкции для обработки системных аппаратных сообщений клавиатуры следует после обработки этих сообщений передать их в DefWindowProc, чтобы Windows могла по-прежнему их использовать в обычных целях:

case WM_SYSKEYDOWN: MessageBox(hWnd,”Message WM_SYSKEYDOWN”,”Key”,MB_OK); return(DefWindowProc(hWnd,message,wParam,lParam)); case WM_SYSKEYUP: MessageBox(hWnd,”Message WM_SYSKEYUP”,”Key”,MB_OK); return(DefWindowProc(hWnd,message,wParam,lParam));

Замечание. Рассмотрим, что произойдет, если не передать системные аппаратные сообщения в DefWindowProc. Почти все, что влияет на окно программы, в первую проходит через оконную процедуру. Windows самостоятельно обрабатывает сообщения только в том случае, если они передаются в DefWindowProc.

Например, пусть при обработке пришедшего в оконную процедуру сообщения добавлены строки для следующей обработки системных сообщений:

case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_SYSCHAR: return 0;
  • При этом происходит запрет всех операций с клавишей <Alt> (команды меню, <Alt+Tab> и др.), когда окно программы имеет фокус ввода.

Несистемные сообщения WM_KEYDOWN и WM_KEYUP обычно вырабатываются для клавиш, которые нажимаются и отпускаются без участия клавиши <Alt>. Приложение может использовать или не использовать эти сообщения клавиатуры. Сама Windows их проигнорирует.

Обычно сообщения о нажатии и отпускании появляются парами. Однако если пользователь оставит клавишу нажатой так, чтобы включился автоповтор, то Windows посылает оконной процедуре серию сообщений WM_KEYDOWN (или WM_SYSKEYDOWN) и одно сообщение WM_KEYUP (или WM_SYSKEYUP), когда, в конце концов, клавиша будет отпущена.

  • Также как и все синхронные сообщения, аппаратные сообщения клавиатуры также становятся в очередь. Приложение с помощью функции GetMessageTime получить время нажатия и отпускания клавиши относительно старта системы.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: