본문 바로가기
프로그래머의 길/C & C++

TranslateMessage()

by 제이콥케이 2008. 4. 15.
반응형

키보드에서 A키를 눌렀다 뗐다고 보자. 발생하는 메시지는 순서대로 WM_KEYDOWN, WM_CHAR, WM_KEYUP 세가지이다. WM_CHAR 메시지는 사용자에 의해 발생하는 메시지가 아니다. 키보드로부터 전달되는 메시지는 키를 누를 WM_KEYDOWN, 키를 WM_KEYUP 두가지뿐이다. 그럼 WM_CHAR 메시지는 어디서 발생할까? 메시지는 WM_KEYDOWN 의해 추가로 발생하는 메시지이며 메시지 루프에서 인위적으로 생성된다. Key 프로젝트를 메시지 루프를 다시 보자.

while(GetMessage(&Message,0,0,0)) {

              TranslateMessage(&Message);

              DispatchMessage(&Message);

}

GetMessage 메시지 큐에서 메시지를 꺼내온 메시지를 TranslateMessage 함수로 넘겨 준다. TranslateMessage 함수는 전달된 메시지가 WM_KEYDOWN인지와 눌려진 키가 문자키인지 검사해 보고 조건이 맞을 경우 WM_CHAR 메시지를 만들어 메시지 큐에 덧붙이는 역할을 한다. 물론 문자 입력이 아닐 경우는 아무 일도 하지 않으며 메시지는 DispatchMessage 함수에 의해 WndProc으로 보내진다. 만약 메시지 루프에서 TranslateMessage 함수를 버리면 WM_CHAR 메시지는 절대로 WndProc으로 전달되지 않을 것이다. 과연 그런지 Key예제에서 함수 호출문을 주석으로 묶은 직접 실행해 보기 바란다.

 

반응형

'프로그래머의 길 > C & C++' 카테고리의 다른 글

sscanf  (0) 2008.04.21
GetModuleFileName() 현재 실행 디렉토리 얻어오기  (0) 2008.04.21
assert()  (0) 2008.04.15
지뢰찾기  (0) 2007.06.28
라이프 게임  (0) 2007.06.28