LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
이 WndProc함수를 알아보겠습니다.
WndProc(발생할 주체, 메세지, wParam, lParam) 에서
lParam은 우리 마우스의 좌표입니다.
int x = LOWORD(lParam);
int y = HIWORD(lParam);
LOWORD에 들어가 보면 ((WORD)(((DWORD_PTR)(l)) & 0xffff)) 로 정의가 되어있습니다.
여기서 0xffff 는 0x0000ffff인데 이것을 & 하면 앞에 4비트는 0이되고 뒤에 4비트는 숫자 그대로인 것을 알 수 있습니다.
((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff)) 이것을 4비트를 shift 시킨 것입니다.
즉 4비트로 나눠서 0000/0000 으로 나누어서 LOWORD, HIWORD 로 나눈 것입니다. 이것이 곧 좌표를 나타내게 됩니다.
switch (message)
{
case WM_MOUSEMOVE:
{
int x = LOWORD(lParam); // ((WORD)(((DWORD_PTR)(l)) & 0xffff)) 0x0000ffff => 앞에 4비트는 리센 뒤에 4개는 그대로
int y = HIWORD(lParam); // 앞에 4비트 x좌표 , 뒤에 4비트 y좌표
WCHAR str[32];
static long ct = 0;
ct++;
wsprintf(str, TEXT("번호 %d %d %d\n"), ct,x,y);
OutputDebugString(str);
}
break;
이런식으로 좌표의 값을 나타 낼 수 있습니다.
case WM_PAINT: //새로 화면이 그려져야 할 때 --> 다른화면으로 가려졌다가 다시 킬 때! 옮길 때 등등...
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다...
EndPaint(hWnd, &ps);
}
break;
이 코드는 화면이 다시 그려져야 할 경우에 실행되는 코드입니다.
화면이 다시그려진다 --> 다른화면으로 가려졌다가 다시 불러올 때 or 옮길 때 등등이 있습니다.
'비트교육 > API' 카테고리의 다른 글
API(6) -WinMain함수 알아보기 (0) | 2020.09.05 |
---|---|
API(5) -WM_PAINT에 대해 알아보기! (0) | 2020.09.03 |
API(3) -win32의 WinProc에 대해 알아보기! (0) | 2020.09.03 |
API(2) (0) | 2020.09.03 |
API(1) (0) | 2020.09.03 |