C++ 2D

5. 마우스

seqw 2021. 5. 28. 01:21
1. 변수 선언
POINT _pt;
---------------
char str[128];

switch (iMessage)
{
	
	case WM_CREATE:
		rc = {200,200,500,500};
	break;
    
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
        
		2. //마우스 위치 출력하기
		sprintf_s(str, "마우스 X : %d, 마우스 Y : %d", pt.x, pt.y);
		TextOut(hdc, 500, 20, str, strlen(str));
        
		Rectangle(hdc,rc.left , rc.top , rc.right , rc.bottom);
		
		3.//Rect와 마우스 충돌 확인
		if (PtInRect(&rc, pt))
		{
			TextOut(hdc, 20, 20, "in", 2);
		}
		else
		{
			TextOut(hdc, 20, 20, "out", 3);
		}
		EndPaint(hWnd, &ps);
		
	break;
    
	case WM_MOUSEMOVE:
		
		4. //POINT값 초기화. 
		pt.x = LOWORD(lParam);
		pt.y = HIWORD(lParam);

		InvalidateRect(_hWnd, NULL, true);
	break;

	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
   
1. POINT _pt; : 마우스 좌표값을 받을 변수 선언

_pt.x 에는 x값을 _pt.y 에는 y값이 들어간다.

2. sprintf_s(str, "마우스 X : %d, 마우스 Y : %d", pt.x, pt.y);

sprintf_s(입력받을 변수,문자열,문자열에 사용할 변수(문자열에 따라 늘어남) );

변수와 문자열 사이에 변수의 최대 크기를 넣는 곳이 있는데 왠지 안넣어도 돌아간다?

3. PtInRect(&rc, pt) : 입력한 RECT와 POINT의 좌표가 겹치면 true 를 반환

PtInRect(&Rect 값, POINT 값)

4.	pt.x = LOWORD(lParam); : x값 입력
	pt.y = HIWORD(lParam); : y값 입력
    
LOWORD() : 넣은 값의 데이터 타입을 WORD로 바꿔준다 함. 32비트중 하위 16비트만 남게한다함
HIWORD() : 넣은 값의 데이터 타입을 WORD로 바꿔준다 함. 32비트중 상위 16를 얻기 위해 사용한다함