Побитовое И (lParam & 0x4000000)
будет работать, но вы можете легко сделать его более читабельным, используя определения, включенные в Windows.h (который вы уже используете для WM_KEYDOWN
):
case WM_KEYDOWN:
if((HIWORD(lParam) & KF_REPEAT) == 0) //process wParam
return 0;
HIWORD
занимает 16 старших разрядов.
KF_REPEAT
(= 0x4000) отмечает местоположение бита, представляющего повторное сообщение WM_KEYDOWN
.
Побитовое И этих значений равно 0, когда флаг повтора отключен (первоначальное нажатие клавиши), и равно 1 каждый последующий раз (функция автоповтора), пока клавиша не будет отпущена.
Это небольшая вещь, но она имеет большое значение для улучшения читабельности вашего кода. 0x40000000
ничего не значит для читателя, хотя многое можно вывести из KF_REPEAT
.