티스토리 뷰
키보드 입력 시 발생하는 이벤트
WM_KEYDOWN, WM_KEYUP, WM_CHAR (문자 눌림)
wParam
영문자, 숫자키 같은 문자키가 눌리면 ASCII코드가 wParam 에 전달된다.
문자키 아닌 경우 가상키코드가 wParam 에 전달된다.
lParam (코드에서 거의 사용 안함)
0~15 비트 키가 연속적으로 눌릴떄 카운트
16~23비트 스캔코드(일반적으로 사용 안함)
24 확장키(숫자키패드의 Num Lock, Enter 키등)이 눌리면 1, 그렇지 않으면 0
25~28 사용안함
29 Alt 키가 눌리면 1, 아니면 0
30 메시지 보내기전(이전)에 키가 눌려져 있으면 1, 아니면 0
31 키가 눌려지면 1, 아니면 0
- 가상 키코드
VK_CANDEL Ctrl+Break
VK_BACK
VK_TAB
VK_RETURN
VK_SHIFT
VK_CONTROL
VK_MENU Alt 키
VK_CAPITAL Caps Lock
VK_SPACE
VK_PRIOR Page Up
VK_NEXT Page Down
VK_END
VK_HOME
VK_LEFT
VK_UP
VK_RIGHT
VK_DOWN
VK_INSERT
VK_DELETE
VK_F1~VK_F24
VK_NUMLOCK
VK_SCROLL Scroll Lock 키
case WM_KEYDOWN:
switch(wParam) {
case VK_HOME:
break;
}
break;
- 문자키 입력때마다 화면 출력하기
static TCHAR strChar[MAX_PATH];
int nlen = 0;
switch(iMessage) {
case WM_CHAR: // 문자키가 눌리면 TranselateMessage() 에 의해 WM_CHAR 이벤트 발생함
nLen = strlen(strChar);
strChar[nLen] = (char)wParam;
strChar[nLen+1] = 0;
InvalidateRect(hWnd, NULL, FALSE);
break;
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 100, 100, strChar, strlen(strChar);
EndPaint(hWnd, &ps);
break;