비트교육/API

API(4) -win32의 WndProc에 대해 알아보기!

ballde 2020. 9. 3. 20:28
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