WM_CHAR 메시지 와 TranslateMessage 개념
* WM_CHAR
- 기본 입력 장치인 키보드로 부터 발생한 입력을 저장하는 윈도우 메시지
- WM_CHAR은 입력된 문자의 아스키 코드를 wParam로 전달하도록 되어 있다.
- wParam을 읽어 어떤 키보드 값이 눌렸는지 알아내는 것
- 예시) s 키를 누르면 wParam에 53h(s의 아스키 코드값) 전달
- 예제) 키를 입력을 받고 key 배열에 계속해서 입력값을 추가해 출력하는 예제
static char key[256];
switch (iMessage)
{
case WM_CREATE:
break;
case WM_CHAR:
key[strlen(key)] = (TCHAR)wParam;
key[strlen(key) + 1] = 0;
InvalidateRect(hWnd, NULL, FALSE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 20, 300, key, strlen(key));//키입력
EndPaint(hWnd, &ps);
break;

* TranslateMessage 의 WM_CHAR 생성 과정
- WM_CHAR 발생 경로 추적: 키를 누르는 행위 -> WM_KEYDOWN 발생 -> TranslateMessage 에 WM_KEYDOWN 전달 -> 문자인지 판단 - > WM_CHAR 생성 후 메시지 큐에 덧붙임(문자아 아니면 행동 없다) -> DispatchMessage에 의해 WM_CHAR을 WndProc로 보냄
- 결론적으로 WM_CHAR은 TranslateMessage로 부터 만들어지는 WM_KEYDOWN의 추가 발생 메시지
- 기본 입력 장치인 키보드로 부터 발생한 입력을 저장하는 윈도우 메시지
- WM_CHAR은 입력된 문자의 아스키 코드를 wParam로 전달하도록 되어 있다.
- wParam을 읽어 어떤 키보드 값이 눌렸는지 알아내는 것
- 예시) s 키를 누르면 wParam에 53h(s의 아스키 코드값) 전달
- 예제) 키를 입력을 받고 key 배열에 계속해서 입력값을 추가해 출력하는 예제
static char key[256];
switch (iMessage)
{
case WM_CREATE:
break;
case WM_CHAR:
key[strlen(key)] = (TCHAR)wParam;
key[strlen(key) + 1] = 0;
InvalidateRect(hWnd, NULL, FALSE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 20, 300, key, strlen(key));//키입력
EndPaint(hWnd, &ps);
break;

* TranslateMessage 의 WM_CHAR 생성 과정
- WM_CHAR 발생 경로 추적: 키를 누르는 행위 -> WM_KEYDOWN 발생 -> TranslateMessage 에 WM_KEYDOWN 전달 -> 문자인지 판단 - > WM_CHAR 생성 후 메시지 큐에 덧붙임(문자아 아니면 행동 없다) -> DispatchMessage에 의해 WM_CHAR을 WndProc로 보냄
- 결론적으로 WM_CHAR은 TranslateMessage로 부터 만들어지는 WM_KEYDOWN의 추가 발생 메시지
댓글
댓글 쓰기