키보드 메세지 처리
1. 키보드를 입력 시
- 윈도우 프로시저인 WinProc( )에 키보드 메세지, 가상키 값, 부가정보가 전달
- 참고 : WM 은 Window Message의 약자.
전달변수 |
전달내용 |
값 |
iMSG |
키보드 메세지 |
WM_KEYDOWN WM_CHAR WM_KEYUP |
wParam |
가상키 값 |
a, b, c ... 1, 2, 3 ... !, @, #, $ ... VK_BACK(Backspace) VK_RETURN(Enter) ...
|
lParam |
부가정보 |
키 반복횟수 확장 키 코드 이전 키 상태 |
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { PAINTSTRUCT ps; HDC hdc; case WM_CHAR: { TCHAR tmp[40]; hdc = GetDC(hWnd); _stprintf_s(tmp, _T("keyboard input -> %s"), _T("show")); TextOut(hdc, 100, 200, tmp, _tcslen(tmp)); ReleaseDC(hWnd, hdc); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
1) WM_KEYDOWN
- 키보드의 키를 눌렀을 때 발생되는 이벤트
2) WM_CHAR
- 키보드의 문자 키를 눌렀을 때 발생되는 이벤트
3) WM_KEYUP
- 키보드의 키를 눌렀다가 떼었을 때 발생되는 이벤트
ex) 만약 a를 눌렀다면
[1] 먼저 눌려졌기 때문에 WM_KEYDOWN 메세지가 발생
[2] WM_CHAR 메세지가 발생
[3] WM_KEYUP 메세지가 발생
+) 가상키의 종류
2. 사용한 함수
1) HDC hdc = GetDC(hWnd);
- GetDC(hWnd); 함수로 출력영역에 대한 핸들값을 반환 받는다.
- case WM_PAINT : 에서는
HDC hdc = BeginPaint(hWnd, &ps); 를 사용하여 출력영역에 대한 핸들값을 반환받았다.
그러나 WM_PAINT가 아닌 다른 메세지에서는 GetDC( ) 함수를 사용해야 한다.
두 함수의 기능은 같지만
다른윈도우로 가려지거나, 최소화 후 다시 창을 띄울 시
WM_PAINT 메세지를 처리하는 case문은 계속 볼 수 있다.
그러나 GetDC( ) 함수를 통해 화면에 출력하는 case문의 내용은 모두 사라진다.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { HDC hdc; TCHAR tmp[80]; static TCHAR str[100]; case WM_CHAR: hdc = GetDC(hWnd); _stprintf_s(tmp, _T("짜잔!!! ")); TextOut(hdc, 2, 2, tmp, _tcslen(tmp)); ReleaseDC(hWnd, hdc); case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다. _stprintf_s(tmp, _T("아무키나 눌러보세요.")); TextOut(hdc, 2, 2, tmp, _tcslen(tmp)); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
[실행화면]
->
'Programming Language > Windows API' 카테고리의 다른 글
keyboard[2] (0) | 2018.08.27 |
---|---|
keyboard[1] (0) | 2018.08.27 |
TextOut(), DrawText() (0) | 2018.08.26 |
기본구조 상세설명 (0) | 2018.08.25 |
출력 (0) | 2018.08.25 |
댓글