Как 1 раз обработать нажатие клавиши?

Проблема заключается в том, что если зажать клавишу в итоге "case WM_KEYDOWN" будет возвращать клавишу постоянно.


Ответы (1 шт):

Автор решения: Zhihar

например можно

  1. отлавливать WM_KEYUP, тогда будет отловлено только 1 "нажатие"

  2. первый метод имеет недостаток, что если нажать и не отпускать, то событие долго не будет срабатывать, поэтому оптимальнее сделать так:

     case WM_KEYDOWN:
         // выполнять действия, только если флаг нажатия сброшен
         if (isKeyPressed == false)
         {
             // сделать какие-то действия
             make_actions();
    
             // установить флаг нажатия
             isKeyPressed = true;
         }
         break;
    
     case WM_KEYUP:
         // сбросить флаг нажатия
         isKeyPressed = false;
         break;
    
→ Ссылка