Windows API

키보드 입력(WM_KEYDOWN, WM_KEYUP)

readme.md 2024. 6. 9. 14:33

WindowsAPI를 이용하여 사용자 입력, 그 중에서 키보드 입력 처리를 하기 위해선 WM_KEYDOWN, WM_KEYUP 메시지 코드를 사용해야 한다.

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_KEYDOWN:
            // 키가 눌렸을 때 처리
            // 키에 대응되는 정수값 확인
            cout << "WM_KEYDOWN: " << (int)wParam << endl;
            break;
        case WM_KEYUP:
            // 키가 놓였을 때 처리
            break;
        case WM_CHAR:
            // 문자 입력 처리
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

WM_KEYDOWN은 키보드의 특정 키가 눌린 순간 발생하는 윈도우 메시지다. 이 때 입력된 키에 대한 값은 wParam에 정수형으로 전달된다. 따라서 입력된 키에 대응하는 정수값을 확인해보려면 wParam을 정수형으로 캐스팅한 후 값을 확인해보면 된다. WM_KEYUP은 키가 떼어질 때 발생하는 윈도우 메시지다.

키보드를 통해 입력된 값이 문자라면 WM_CHAR가 추가적으로 호출된다. WM_KEYDOWN에 대한 메시지 처리가 완료되면 TranslateMessage 함수가 호출되면서 입력된 키가 문자인 경우에는 WM_CHAR 메시지 코드를 다시 한 번 호출하게 된다. 따라서 WM_KEYDOWN이 첫 번째로 호출되고, TranslateMessage 함수를 통해 WM_CHAR 메시지가 호출되면서 한 번의 키 입력으로 두 개의 WindowProc 함수가 호출되는 것이다.