키보드 메세지 처리
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 |
댓글