Win32 API with 나우캠퍼스

Win32 API 11강. 유용한 함수(3) 충돌 함수

코다람쥐 2022. 8. 20. 16:39

3. 충돌 함수

PtInRect()


▩ 역할

- 지정한 위치가 사각형 안에 포함 되었는지를 판별

 

▩ 함수 원형

BOOL PtInRect(
  [in] const RECT *lprc,
  [in] POINT      pt
);

*lprc : Rect 구조체 주소

pt : PT형 구조체(마우스를 다루는 구조체이다.)

 

포함 : 0 이외의 값 리턴

미포함 : 0 리턴

 

사용예시. WinProc

    case WM_LBUTTONDOWN:
        pt.x = LOWORD(lParam);
        pt.y = HIWORD(lParam);
        InvalidateRect(hWnd, NULL, TRUE);
        break;
    case WM_PAINT:
        {
            static POINT pt;
            RECT rect = { 30, 30, 130, 130 };
            static char string[100];
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            HDC hMemDC;
            HBITMAP hBitmap;
            HPEN hPen;
            
            if(PtInRect(&rect, pt) != 0)
                sprintf_s(string, "포함 됨");
            else
                sprintf_s(string, "포함 안됨");

            TextOut(hdc, 0, 0, string, strlen(string));
            hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
            SelectObject(hdc, hPen);
            Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);
            DeleteObject(hPen);            
            
            EndPaint(hWnd, &ps);
        }
        break;

사각형 내부를 마우스로 누르면 '포함 됨'으로 바뀐다.

 

IntersectRect()


▩ 역할

- 두 개의 사각형의 교차를 판별

 

▩ 함수 원형

BOOL IntersectRect(
  [out] LPRECT     lprcDst,
  [in]  const RECT *lprcSrc1,
  [in]  const RECT *lprcSrc2
);

lprcDst : 교차된 영역의 사각형을 저장할 구조체3. NULL을 넣으면 안됨!

*lprcSrc1 : 교차되었는지 판별할 RECT구조체 1

*lprcSrc2 : 교차되었는지 판별할 RECT구조체 2

 

교차 : 0 이외의 값 리턴

미교차 : 0 리턴