Nagie's DevStory
[WIN32 API] 08. 선 그리기 본문
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