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);