[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. Если можно побольше конкретики.
Приветствую всех.
Вопрос так ставить нельзя. Но по сути ваши проблемы в том, что вы используете
диалоговое окно, а ожидаете, что оно будет вести себя как обычное.
Не совсем понятно, для "этого" -- для чего? Для того чтобы обрабатывать или для
того чтобы не обрабатывать?
Как вариант: обрабатывать нажатие на уровне элемента управления, то есть переопределить
оконную процедуру конкретного элемента управления (например, списка), в котором
вы хотите перехватывать нажатие пробела (такое переопределение называется "сабклассинг").
Успехов. Анатолий.