이번 시간에는 WM_CHAR 메세지와 마우스 관련 메세지 처리에 대해 알아보자.
프로그램 실행 후 알파뱃 키를 누르면 WM_CHAR과 WM_KEYDOWN 둘다 뜨는 것을 볼 수 있는데, 이 둘은 용도가 다르다.
WM_CHAR은 텍스트 인풋을 받는다거나 할 때 사용되는 메세지로, 알파뱃키(+엔터나 스페이스바와 같은 일부 특수한 경우)에 대해서만 호출된다.
즉 F1을 누르면 WM_KEYDOWN은 뜨지만 WM_CHAR 메세지는 받지 않는다.
또 대소문자 구분(Shift)없이 누른 키에 대한 값을 출력했던 WM_KEYDOWN과 달리, WM_CHAR은 쉬프트 눌린 여부에 따라 파라미터 값도 변한다.
그리고 이렇게 어떤 상황에서 WM_CHAR을 출력해야하는지를 결정하는 과정이 앞서 대략적인 흐름을 살필 때 봤던 TranslateMessage()이다.
저기서 WM_KEYDOWN 메세지를 받고, 만약 해당 키가 WM_CHAR을 만들어야 하는 경우라면 WM_CHAR을 만들어주는 것이다. 때문에 만약 TranslateMessage()를 주석처리하면 어떤 키를 누르던 WM_CHAR 메세지를 받지 않을 것이다.
(주석: TranslateMessage()의 용도는 이거 말고도 더 있지만 자세한 건 MSDN을 참고하자)
이번에는 마우스와 관련된 메세지 하나를 살펴보자.
WM_LBUTTONDOWN 메세지의 MSDN을 살펴보면 lParam이 마우스의 클릭 좌표를 반환하는 것을 알 수 있는데, 이를 사용편리한 형태로 가공해주는 API도 윈도우는 지원한다.
POINTS 구조체로 만들거나 GET_X_LPARAM (또는 Y) 사용해 값 하나만 추출할 수도 있다.
사용예시는 정말 직관적이므로 생략한다.
'computer graphics > DirectX' 카테고리의 다른 글
[D3D Engine] 8.Error handling, Custom icon (0) | 2023.03.19 |
---|---|
[D3D Engine] 7. Window framework (0) | 2023.03.19 |
[D3D Engine] 5. Window Messages (1) | 2023.03.19 |
[D3D Engine] 4. Message loop, WinProc (0) | 2023.03.19 |
[D3D Engine] 3. Window Creation (0) | 2023.03.19 |