본문 바로가기

Programming/API

WM_CHAR 메시지와 WM_KEYDOWN 메시지

WM_CHAR 메시지


윈도우즈는 키보드로부터 입력을 받아 하나의 프로그램에 키보드 메세지(WM_CHAR)를 보내준다. 멀티 태스킹 환경에서 여러개의 프로그램을 실행하고 있더라도 활성화된 프로그램만 입력 받을 수 있다.


*WndProc에 변수가 선언되어 있는경우 지역변수이기 때문에 메시지 발생할 때마다 초기화되기 때문에 앞에 static을 붙여 정적변수를 만들어야 한다. 아니면 전역 변수로 선언하는 방법도 있다.


case WM_CHAR:

len = _tcslen(str);

str[len]=(TCHAR)wParam;

str[len+1]=0;

InvalidateRect(hWnd,NULL,TRUE);

return 0;


문자키가 입력되어지면 입력되어져있는 문자열의 길이를 strlen함수를 이용하여 얻는다.

문자열 끝에 입력받은 wParam값을 넣어주고 그 뒤에 NULL값을 넣어 문자열의 끝임을 알려준다.

그리고 InvaildateRect함수를 호출하여 WM_PAINT 메시지를 발생시켜 문자열이 입력될때마다 새로 화면을 그리도록 하고있다.


WM_KEYDOWN 메시지


문자 이외의 키를 입력 받는 경우에 쓰여진다.

static int x=100;

static int y=100;


case WM_KEYDOWN:

switch(wParam) {

case VK_LEFT:

x-=8;

break;

case VK_RIGHT:

x+=8;

break;

case VK_UP:

y-=8;

break;

case VK_DOWN:

y+=8;

break;

}

InvalidateRect(hWnd,NULL,TRUE);

return 0;


키가 입력 되어지면 wParam값을 읽어서 입력된 키값을 받아서 그에 맞는 x좌표,y좌표의 값이 변하고 있다.

그 후에는 InvalidateRect함수를 호출하여 새로운 화면을 그리도록 하고있다.
InvalidateRect함수의 마지막 인자값을 FALSE로 변경하게되면 그전 좌표의 텍스트가 남아있고 새로운 좌표에 텍스트가 추가되는데 그것은 그 인자값이 무효화되기전의 배경을 새로 그릴 것인가 아니면 놔둘 것인가에 대한 값이기 때문이다.
WM_KEYDOWN 메시지와 반대로 키에서 떨어질때 발생하는 WM_KEYUP 메시지도 있는데 발생조건만 다를뿐 WM_KEYDOWN 메시지와 동일하다. 잘 쓰이지는 않는다 


'Programming > API' 카테고리의 다른 글

마우스의 입력  (0) 2013.08.13
무효화 영역과 InvalidateRect 함수  (0) 2013.08.09
가상키코드  (0) 2013.08.08
IME를 사용해서 한글입력기를 만들잣!  (0) 2013.08.06
멀티바이트와 유니코드  (0) 2013.08.06