728x90
'나우캠퍼스X아워즈팜'유튜브의 'Win32 API 6강. 키보드와 마우스, 타이머 (1/3)'영상을 보고 정리한 내용입니다.
키보드 입력과 관련된 메시지와 함수
컴퓨터와 연결된 장치는 os가 제일 먼저 인식을 합니다. 장치의 정보들이 os에 전달이 되며, 그런 정보들을 os는 값, 즉 메시지로 가공을 합니다. 이렇게 가공된 메시지 값을 os는 응용프로그램에 보내주기 때문에 응용프로그램은 os로부터 받아온 메시지를 통해서 키 입력 정보도 가져올 수 있습니다.
키보드 관련 메시지
- WM_CHAR, WM_KEYDOWN
- WM_CHAR 메시지는 문자 키에 발생하는 메시지이다. (문자 키가 입력되었을 때 발생하는 메시지)
wParam은 WM_CHAR메시지가 발생할 때 부가적으로 발생하는 메시지이며 어떤 문자 키가 발생했는지의 정보를 아스키코드 값으로 가지고 있다. 영어의 대소문자는 wParam 메시지로 전달되어서 오는 아스키 코드 값으로 구분한다. - WM_KEYDOWN 메시지는 모든 키에 대해 발생하는 메시지이다. (아무 키가 눌렸을 때 발생하는 메시지)
WM_KEYDOWN메시지가 발생할 때 부가적으로 발생하는 wParam에는 가상 키 코드(ex: VK_LEFT, VK_HOME) 또는 문자상수(ex:'1', 'A'(대문자로만 저장됨))로 누른 키의 정보를 담아서 전달된다. 키 입력만을 인식하기 때문에 전부 대문자로 인식한다.
키보드 관련 함수
- GetAsyncKeyState()
- SHORT GetAsyncKeyState(int nKey); //가상 키 코드를 받는다.
- 실시간으로 키 입력을 체크한다.
- 키 눌림이 있으면 음수값을 리턴한다. ( ex: GetAsyncKeyState(VK_F1); < -- 이 값이 음수라면 F1 키가 눌린 것이다. )
- WM_KEYDOWN메시지나 WM_CHAR 메시지는 이런 순서로 응용프로그램에 전달이 된다.
- 사용자가 키를 누르며 메시지가 발생한다.
- 그 메시지는 메시지 큐에 저장된다.
- 응용프로그램 안에서 메시지 루프를 돌면서 메시지가 있는지 계속 조사하면서 필요한 메시지를 꺼낸다.
- 응용프로그램은 위와 같은 방식으로 메시지를 os로부터 가져오기 때문에 결국 키보드 입력 관련 메시지가 쌓여있으면서 차례차례 메시지에 따른 처리를 하는 식이다. 이런 방식은 약간의 오차가 있을 수 있기 때문에 바로바로 키 입력에 대한 처리를 해야 한다면 현재 입력된 키만을 가져오는 GetAsyncKeyState()함수를 사용해야 한다.
오류가 있다면 말씀해주시면 감사하겠습니다. ^^
'무작정 따라해보기(정리, 문제풀기) > Win32API' 카테고리의 다른 글
20. WIN32API 프로그래밍 - 타이머 관련 (0) | 2021.09.02 |
---|---|
19. WIN32API 프로그래밍 - 마우스 관련 (0) | 2021.08.31 |
17. [WIN32API 프로그래밍] GDI오브젝트와 메모리DC를 이용하여 비트맵 이미지 출력하기 (0) | 2021.08.29 |
16. [WIN32API 프로그래밍] 그래픽 오브젝트 (0) | 2021.08.28 |
15. [WIN32 API 프로그래밍] 문자열 출력(그래픽) (0) | 2021.08.17 |