Win32에서는 키보드 입력 메시지또한 처리 할 수 있다.
C언어에서는 kbhit()라는 함수등을 사용한다.
키보드는 키를 눌렀을때, 떼었을때, 문자일때로 나뉘어 져있다.
키보드의 정보는 Virtual-Key라는 것을 이용해서 구분을 짓는다. 1
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <windows.h> #include <string.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; WNDCLASS WndClass; int numbers = 0; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; g_hInst = hInstance; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION); WndClass.hInstance=hInstance; WndClass.lpfnWndProc=(WNDPROC)WndProc; WndClass.lpszClassName="ApiBase"; WndClass.lpszMenuName=NULL; WndClass.style=CS_HREDRAW|CS_VREDRAW; RegisterClass(&WndClass); hWnd = CreateWindow("ApiBase", "Test", WS_OVERLAPPEDWINDOW, 10,// X 100,// Y 400,// Width 400,// Height NULL, (HMENU)NULL, hInstance, NULL); ShowWindow(hWnd,nCmdShow); while(GetMessage(&Message,0,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); } return Message.wParam; } LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { switch(iMessage) { case WM_CREATE: strcpy(strTemp, ""); break; case WM_KEYDOWN: switch(wParam) { case VK_HOME: printf("Home\n"); break; case VK_END: printf("End\n"); break; case VK_UP: printf("Up Key\n"); break; case VK_F1: printf("F1\n"); break; case 0x41: printf("A\n"); break; } break; case WM_LBUTTONUP: printf("%d\n",ReleaseCapture()); break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hWnd,iMessage,wParam, lParam); } | cs |
하지만, 키보드 메시지를 사용한다면, 연속적으로 눌은 키에 대한 정보는 처리가 되지 않는다.
쉽게 말해서 노트패드에 정보를 입력해보자.
동시다발적으로 여러 키를 눌을 경우에, 해당 키의 정보를 다 읽지 못하고, 하나의 키만 처리하는걸 알 수 있을 것이다.(노트패드에서 이렇게 처리할 경우가 있을리도 만무하다.)
이유는 메시지가 하나의 값만 계속 받아서 처리하기 떄문일것이다.
그럴때는 어떻게 하는가?
여기서, GetKeyState 라는 함수를 사용하면 된다. 3
해당 함수는 키의 눌음을 인식하는 함수이다.
'연습' 카테고리의 다른 글
콘솔 위치 옮기기. (0) | 2016.07.12 |
---|---|
C언어 키 눌음 처리. (0) | 2016.07.11 |
와콤 스타일러스 펜(FindLine) 구매기. (0) | 2016.07.09 |
Large Text Compression 최근 근황 (0) | 2016.07.08 |
Windows API 프로그래밍 -17. 마우스 캡쳐. - (0) | 2016.07.07 |