C++ 2D
3.Rect, WM, VK, InvalidateRect(,,)
seqw
2021. 5. 26. 23:57
1. 위아래로 가는 네모
RECT rc; 1.
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (iMessage)
{
case WM_CREATE: 3.
rc = {50,50,100,100}; 2.
break;
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
Rectangle(hdc,rc.left , rc.top , rc.right , rc.bottom);
EndPaint(hWnd, &ps);
}
break;
case WM_KEYDOWN: 4.
{
switch (wParam) 5.
{
case VK_UP: 6.
rc.top -= 5;
rc.bottom -= 5;
break;
case VK_DOWN: 6.
rc.top += 5;
rc.bottom += 5;
break;
case VK_ESCAPE: 6.
PostQuitMessage(0); 7.
break;
}
InvalidateRect(_hWnd, NULL, true); 8.
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}
1. RECT rc : RECT 선언
2. rc = {50,50,100,100}; :rc = {x1,y1,x2,y2} 대로 입력됨
각각의 값은 rc.left , rc.top , rc.right , rc.bottom 으로 호출 가능
3. WM_CREATE: :메시지 시작할 때 1회 실행됨
4. WM_KEYDOWN: :키가 눌릴때 반응
5. 위에 LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
부분에서 WPARAM wParam
:키보드 클릭 및 마우스 클릭을 체크한다.
6. VK_UP(DOWN,ESCAPE) :키 체크(방향키 위,아래,ESC)
7. PostQuitMessage(0) :메세지 루프를 탈출 시켜줌
8. InvalidateRect(_hWnd, NULL, true); :정해진 영역을 지우고 갱신한다.
InvalidateRect(_hWnd(핸들), 초기화 영역, 배경 갱신 여부);
9.intersectRect(&rc, &rc1, &rc2); :Rect끼리의 충돌을 체크해준다. 서로 만나는 공통좌표를 확인함.
intersectRect(계산용 rect, 1번 rc, 2번 rc);