Отправляет email-рассылки с помощью сервиса Sendsay

За 2013-12-24

[prg] Re: win32 приложение. обработка нажатия клавиш

Приветствую всех.

> Вопрос первый: почему это сообщение вообще не обрабатывается

Вопрос так ставить нельзя. Но по сути ваши проблемы в том, что вы используете
диалоговое окно, а ожидаете, что оно будет вести себя как обычное.

> и что для этого
> нужно?

Не совсем понятно, для "этого" -- для чего? Для того чтобы обрабатывать или для
того чтобы не обрабатывать?

Как вариант: обрабатывать нажатие на уровне элемента управления, то есть переопределить
оконную процедуру конкретного элемента управления (например, списка), в котором
вы хотите перехватывать нажатие пробела (такое переопределение называется "сабклассинг").

Успехов. Анатолий.

   "i_chay" 2013-12-24 16:01:30 (#2901972)

[prg] win32 приложение. обработка нажатия клавиш

Здравствуйте, уважаемые.

В Win32-приложении пользователь нажимает клавишу Пробел и мне нужно, чтобы
это нажатие обработалось не по умолчанию, а как выполнение некоторых
действий. Сообщение WM_KEYDOWN обрабатывает оконная процедура таким образом:

INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM
lParam) {
switch(uMsg) {
case WM_INITDIALOG: {
return 0;
}
case WM_KEYDOWN: {
switch (wParam) {
case VK_SPACE:
out << "нажали клавишу Пробел" << endl;
out.close();
break;
default:
break;
}
return 0;
}
...

Вопрос первый: почему это сообщение вообще не обрабатывается и что для этого
нужно?

Вопрос второй: если мне понадобится обработать не нажатие одной клавиши
<Space>, а сочетания клавиш <CTRL+SPACE>, то перед обработкой нажатия
клавиши пробел, я должен убедиться, что была еще нажата клавиша <CTRL>
функцией GetAsyncKeyState?

p.s. Если можно побольше конкретики.

   2013-12-24 13:33:51 (#2901863)