Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150

Как ограничить WM_KEYDOWN

16.05.2020, 15:25. Показов 725. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дело в том что если достаточно долго держать нажатой клавишу то WM_KEYDOWN будет отправляться несколько раз. Как сделать чтобы пришло сообщение 1 раз и сможет прийти только при следующем нажатии? Или закостылить как нибудь?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2020, 15:25
Ответы с готовыми решениями:

Как мне поймать WM_KEYDOWN
Пишу обработку сообщения в Dialog Based Project: void CDialogDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if...

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

Хук клавиатуры - как отличать события WM_KEYDOWN и WM_KEYUP при зажатой ALT?
Сделал хук для клавиатуры, столкнулся с проблемой: при зажатой клавише ALT перестают генерироваться события WM_KEYDOWN или по крайней мере...

5
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
16.05.2020, 15:29
Для чего это нужно?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
16.05.2020, 15:55
Цитата Сообщение от Zumhad Посмотреть сообщение
Как сделать чтобы пришло сообщение 1 раз и сможет прийти только при следующем нажатии? Или закостылить как нибудь?
Заведи статический массив bool keys[KEY_CODE_COUNT] в обработчике, размером по количеству кодов клавиш.
Если приходит событие KEYDOWN и для данного кода keys[key_code] == false,
то выставляешь keys[key_code] = true и обрабатываешь событие.
Если же keys[key_code] == true - игнорируешь.
Если приходит событие KEYUP, то выставляешь keys[key_code] = false
0
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
16.05.2020, 16:13  [ТС]
Вот решение:
C++
1
2
3
4
5
6
7
8
9
        case WM_KEYDOWN:
        {
            if (!(HIWORD(lParam) & KF_REPEAT)) //Убрать повторы сообщений
            {
                app.mKeyboard.KeyDown((unsigned int)wParam);
            }
 
            return 0;
        }
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
16.05.2020, 16:35
Zumhad, видел в других темах, Вы игровой движок планируете делать. Если это для него ввод, то зачем тут WinAPI, если для игр есть Xinput?
0
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
16.05.2020, 17:02  [ТС]
valen10, временно решение и возможно лучшее. Я не знаю пока что лучше использовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2020, 17:02
Помогаю со студенческими работами здесь

WM_KEYDOWN
на мсдн написано что функцию вызывать так, case WM_KEYDOWN: switch (wParam) { case VK_UP: // up was pressed...

WM_KEYDOWN
когда программе поступает сообщение WM_KEYDOWN обрабатываю его так HANDLE_MSG(hwnd,WM_KEYDOWN,OnKeydown); дальше есть функция void...

Не отвечает на wm_keydown
procedure TBoard.WndProc(var msg: TMessage); //Оконная процедура. begin inherited WndProc(msg); case msg.Msg of ...

Не работает WM_KEYDOWN
Помогите плиз. Вот кусок кода в оконной процедуре: ... case WM_KEYDOWN: switch (wParam) { case VK_LEFT: if(MatrLine == 2)...

WM_KEYUP, WM_KEYDOWN
Прошу о помощи! Задача: пользователь вводит парольную фразу (одну из предложенных) в текстбокс.Необходимо зафиксировать время удержания...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru