일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Direct Init
- 코딩
- UE4
- DirectX12
- C언어
- CommandList
- RenderTargetView
- 다중표본화
- 프로그래밍
- 동기화
- 다이렉트X 튜토리얼
- 다이렉트X
- GPU
- 전처리문
- vertex
- DESC
- 다이렉트 초기화
- Input Assembler
- 게임수학
- C++
- DirectXTK
- View
- Direct3D Init
- engine
- DirectX
- swapchain
- Direct3D
- CPU
- c
- 세팅
- Today
- Total
비타Cpp
WPARAM, LPARAM 본문
WPARAM과 LPARAM은 WINAPI에서의 사용되는 기본 파라매터이다.
WINAPI는 주로 메시지 전달 방식으로 구동되는데 이때 사용되는 MSG구조체 내부에 WPARAM과 LPARAM이 있다.(그밖에 time, hwnd 등도 있음.)
그럼 이 파라매터들이 가지고 있는 값은 무엇이며, 어떻게 사용될까?
WPARAM
typedef UINT_PTR WPARAM;
minwindef.h 헤더에서 정의된 WPARAM의 typedef자료형이다. UINT_PTR은 unsigned int 포인터를 말한다.
자료 자체가 UINT_PTR인걸 알았지만 이 정수형 포인터가 무엇을 의미하는 값일까?
wParam의 정수형 포인터가 가리키는 정수 값은 여러 가지로 사용될 수 있다. 그중 대표적으로 많이 사용되는 값은 키 입력값이다.
WINAPI에서는 키보드나 마우스 버튼이 입력되는 이벤트가 발생하면 WM_KEYDOWN이라는 메시지를 발생시켜 메세지큐에 들어가게 된다. 그렇다면 이 메시지가 처리되면서 어떤 키보드가 Press상태인지 보내지게 된다.
LPARAM
typedef LONG_PTR LPARAM;
LPARAM도 마찬가지로 minwindef.h에 정의돼있다. 이번에는 LONG_PTR인데, 이는 LONG형 정수 값의 포인터를 말한다.
똑같은 정수형이지만 LPARAM은 다른 용도로 사용된다. 바로 '좌표'값이다.
우리가 마우스를 움직이면 화면에서도 커서가 따라서 움직인다. 화면상의 좌표값이 이동하는 것이다. 이때 2D상의 화면의 좌표는 x축과 y축으로 나눠져 있는데, LPARAM 역시 반씩 나눠져서 좌표를 나타낸다. x축은 LOWORD, y축은 HIWORD이다.
32비트 환경의 포인터의 경우 32비트를 나타내므로, LPARAM도 32비트이고 표현해보면
HIWORD(16비트) | LOWORD(16비트) |
Y | X |
이렇게 된다.
WINAPI에서 마우스가 이동할 때 발생되는 메시지는 WM_MOUSEMOVE이다.
'WIN32_API > 메모' 카테고리의 다른 글
Message 관련 API함수 (0) | 2020.04.25 |
---|