WM_CHAR 메시지

WM_KEYDOWN 메시지가 TranslateMessage 함수에 의해 변환될 때 키보드 포커스가 있는 창에 게시됩니다. WM_CHAR 메시지에 눌린 키의 문자 코드가 포함됩니다.

#define WM_CHAR                         0x0102

매개 변수

wParam

키의 문자 코드입니다.

lParam

다음 표와 같이 반복 수, 검사 코드, 확장 키 플래그, 컨텍스트 코드, 이전 키 상태 플래그 및 전환 상태 플래그입니다.

비트 의미
0-15 현재 메시지의 반복 횟수입니다. 이 값은 사용자가 키를 누르고 있는 결과로 키 입력이 자동 반복되는 횟수입니다. 키 입력이 충분히 오래 유지되면 여러 개의 메시지가 전송되지만 반복 횟수는 누적되지 않습니다.
16-23 스캔 코드입니다. 이 값은 OEM에 따라 달라집니다.
24 키가 고급 101키 또는 102키 키보드에 표시되는 오른쪽 Alt 및 Ctrl 키와 같은 확장 키인지 여부를 나타냅니다. 확장 키면 값이 1이고 확장 키가 아니면 0입니다.
25-28 예약되어 있으므로 사용하지 마세요.
29 컨텍스트 코드입니다. 키를 누른 상태에서 Alt 키를 누르면 값이 1이고 그러지 않으면 0입니다.
30 이전 키 상태입니다. 메시지가 전송되기 전에 키가 눌려져 있으면 값이 1이고 키가 눌려져 있지 않으면 0입니다.
31 전환 상태입니다. 눌렀던 키를 놓는 경우 값은 1이며 키를 누르는 경우 0입니다.

자세한 내용은 키 입력 메시지 플래그를 참조하세요.

반환 값

애플리케이션은 이 메시지를 처리하는 경우 0를 반환해야 합니다.

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
   
    // ...

    case WM_CHAR:
        OnKeyPress(wParam);
        break;

    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}

GitHub의 Windows 클래식 샘플 예제입니다.

설명

WM_CHAR 메시지는 RegisterClass 함수의 유니코드 버전이 창 클래스를 등록하는 데 사용된 경우 wParam의 UTF-16(16비트 유니코드 변환 형식) 코드 단위를 사용합니다. 그렇지 않으면 시스템은 Windows 버전 1903(2019년 5월 업데이트) 이상에서 UTF-8로 설정할 수 있는 현재 프로세스 코드 페이지의 문자를 제공합니다. 자세한 내용은 창 클래스 등록Windows 앱에서 UTF-8 코드 페이지 사용을 참조하세요.

Windows Vista부터 WM_CHAR 메시지는 UTF-16 서로게이트 쌍을 유니코드 창으로 보낼 수 있습니다. 필요한 경우 IS_HIGH_SURROGATE, IS_LOW_SURROGATEIS_SURROGATE_PAIR 매크로를 사용하여 이러한 사례를 검색합니다.

누른 키와 생성된 문자 메시지 사이에 반드시 일대일 대응이 있는 것은 아니므로 lParam 매개 변수의 상위 단어에 있는 정보는 일반적으로 애플리케이션에 유용하지 않습니다. 상위 단어의 정보는 WM_CHAR 메시지 게시 이전의 최신 WM_KEYDOWN 메시지에만 적용됩니다.

향상된 101키 및 102키 키보드의 경우 확장 키는 키보드의 기본 섹션에 있는 오른쪽 ALT 키와 오른쪽 CTRL 키입니다. 숫자 키패드의 왼쪽에 있는 클러스터의 INS, DEL, HOME, END, PAGE UP, PAGE DOWN 및 화살표 키, 숫자 키패드의 나누기(/) 및 ENTER 키입니다. 일부 다른 키보드는 lParam 매개 변수의 확장 키 비트를 지원할 수 있습니다.

WM_UNICHAR 메시지는 UTF-32를 사용한다는 점을 제외하고 WM_CHAR와 동일합니다. ANSI 창에 유니코드 문자를 보내거나 게시하도록 설계되었으며 유니코드 보조 평면 문자를 처리할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Winuser.h(Windows.h 포함)

추가 정보