Nagie's DevStory

[WIN32 API] 08. 선 그리기 본문

Programming/Win32API

[WIN32 API] 08. 선 그리기

Nagie 2023. 11. 16. 00:38
728x90

Win32 API에서 선을 그리고 싶다면 LineTo()를 사용하면 된다.

이 함수 역시 Windows GDI(Graphics Device Interface) 라이브러리에 속하며

wingdi.h에 선언된 LineTo()를 보면 다음과 같다.

 

BOOL LineTo(
  HDC hdc,   // 디바이스 컨텍스트 핸들
  int x,     // x 좌표
  int y      // y 좌표
);

 

다른 GDI 객체와는 다르게 매개변수가 3개만 있으며 각 매개변수는 다음과 같은 역할을 한다.

 

인자 설명
hdc
선을 그릴 대상인 디바이스 컨텍스트의 핸들

x, y
현재 위치에서 선의 끝점까지의 좌표를 지정

 

다음은 좌표 0,0에서 500,200까지 선을 그리는 코드의 예시다.

 

 LineTo(hdc, 500, 200);     // (0, 0)에서 (500, 200)까지 선 그리기

 

LineTo()는 다른 GDI 객체와는 다르게 MoveToEx()를 사용해 시작 지점의 좌표를 지정해 줘야 하는 번거로움이 있고

이 과정이 직관적이지 못해 단번에 이해하기 힘들 수 있어 하나의 함수로 래핑을 해봤다.

 

void drawLine(HDC hdc, int startX, int startY, int lengthX, int lengthY) {

    MoveToEx(hdc, startX, startY, nullptr);
    LineTo(hdc, startX + lengthX, startY + lengthY);
}

 

 //좌표X, 좌표Y, 길이X, 길이Y
 drawLine(hdc,200,200,100,0);   //수평선
 drawLine(hdc,400,200,0,100);   //수직선
 drawLine(hdc,600,200,100,100); //사선

 

함수 래핑전과 후의 코드를 비교해 보자

 

 

래핑전

 

// 수직선 그리기
 MoveToEx(hdc, 100, 50, nullptr);
 LineTo(hdc, 100, 200);

 // 수평선 그리기
 MoveToEx(hdc, 150, 100, nullptr);
 LineTo(hdc, 300, 100);

 // 사선 그리기
 MoveToEx(hdc, 350, 50, nullptr);
 LineTo(hdc, 500, 200);

 

 

래핑후

 

// 수직선 그리기
 drawLine(hdc, 110, 50, 0, 150);

 // 수평선 그리기
 drawLine(hdc, 150, 60, 150, 0);

 // 사선 그리기
 drawLine(hdc, 360, 50, 150, 150);
728x90
Comments