WM_KEYDOWN путаница - PullRequest
       1

WM_KEYDOWN путаница

7 голосов
/ 25 апреля 2010

Я пытаюсь заставить свое приложение что-то делать при нажатии CTRL + S. Я просто не уверен, как параметры W и L работают для WM_KEYDOWN. У MSDN есть кое-что о битовых полях, в которых я не уверен. Как я могу обнаружить CTRL и S? Спасибо

Что мне делать, если другой элемент управления кроме hWnd имеет фокус?

Ответы [ 2 ]

17 голосов
/ 25 апреля 2010

Ну, это - большой список кодов виртуальных клавиш.

CTRL-S будет отправлено в виде 2 WM_KEYDOWN сообщений - сообщения при нажатии клавиши ctrl (VK_LCONTROL или VK_RCONTROL), за которым следует 0x53 для клавиши "S".

Вместо того, чтобы обрабатывать оба сообщения, дождитесь сообщения о нажатии клавиши для нажатия клавиши 'S', затем вызовите GetKeyState , используя магическое значение VK_CONTROL (иначе вам нужно будет проверить индивидуально для левого и правого элементов управления клавиш), чтобы увидеть, была ли нажата клавиша S при нажатой клавише CTRL.

-

Очевидно, сообщения с клавиатуры отправляются непосредственно в окно, которое имеет фокус. Чтобы заставить сочетания акселераторов работать в области приложения, вам необходимо проверить сообщения перед отправкой их в окно фокусировки, т. Е. В насос сообщений. См. Документацию для TranslateAccelerator .

Если вы хотите обрабатывать общесистемные нажатия клавиш, другой ответ указывает на горячую клавишу api.

0 голосов
/ 25 апреля 2010

Когда WPARAM равен CTRL VKcode, тогда установите bool в состояние вашего объекта. Затем, когда появится S, если Ctrlbool, вы получите CTRL-S.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...