컴퓨터/Win32-API
지난 글에서 직접 링크드 리스트를 구현하여 여러 선들의 좌표를 저장하여 선을 그렸습니다.
이런 식으로 하나하나 구현을 하면 공부에는 도움이 되지만, 효율에서는 너무나 떨어지게 됩니다.
본문에서는 C++ STL에서 제공하는 vector클래스를 사용하여 조금 더 간단하게 선들을 저장할 수 있는 방법에 대해서 알아보도록 합시다.
Win32_API - GDI로 선그리기3(연속해서 여러 선 그리기)
서론 Win32_API - GDI로 선그리기2 (마우스 동작을 이용해봅시다.) 서론 지난 글에서 MoveToEx와 LineTo 2개의 함수를 이용해서 선을 그려봤습니다. 본문에서는 이 두 함수와 마우스 동작에 따른 처리를
blog-of-gon.tistory.com
C++ - STL vector 클래스 (손쉬운 동적배열)
서론 C++ STL 라이브러리에서 제공하는 vector클래스는 쉽게 원소를 추가 및 제거할 수 있는 가변 배열의 형태를 가진 컨테이너입니다. 즉 쉽게 동적으로 메모리를 할당하여 데이터를 관리할 수 있
blog-of-gon.tistory.com
C++의 vector 클래스를 사용하기 위해서 라이브러리를 소스코드에 추가해줍시다.
#include <vector>
#include <algorithm>
전역 변수로 vector클래스를 선언해 주도록 합시다. 이때 vector클래스에 담길 값은 POINT구조체 자료형입니다.
이때 pair 클래스를 응용해서 담아주도록 합시다.
std::vector<std::pair<POINT,POINT>> list;
WM_LBUTTONUP 동작을 하는 과정에서 좌표를 저장하도록 선언합니다. 이때 pair의 형태에 시작과 끝의 상태 좌표를 넣어주고 이 pair를 vector클래스에 넣어주도록 합시다.
case WM_LBUTTONUP:
end_pos.x = GET_X_LPARAM(lParam);
end_pos.y = GET_Y_LPARAM(lParam);
std::pair<POINT, POINT> temp;
temp.first = start_pos;
temp.second = end_pos;
list.push_back(temp);
count++;
status = 0;
break;
이제 vector에서 하나씩 값을 꺼내와서 처리하도록 합시다.
case WM_PAINT:
{
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
if (status == 1) {
MoveToEx(hdc, start_pos.x, start_pos.y, NULL);
LineTo(hdc, end_pos.x, end_pos.y);
}
//예제 4를 위한 소스코드
for (int i = 0; i < list.size(); i++)
{
MoveToEx(hdc, list[i].first.x, list[i].first.y, NULL);
LineTo(hdc, list[i].second.x, list[i].second.y);
}
EndPaint(hWnd, &ps);
}
break;
지난 C언어로 직접 연결 리스트를 구현한 것보다 손쉽게 값들을 저장하고 사용할 수 있습니다. 또한 오랫동안 사용해온 라이브러리이기 때문에 그만큼 예외 발생에 대한 처리가 쉽고 문제가 생길 확률이 낮습니다.
지난번 글의 소스코드와 차이를 한번 비교해 보는 것도 좋은 방법입니다.
해당 소스코드를 실행해서 프로그램을 동작시키면 원하는 대로 직선들이 그려지며 잘 출력하고 있습니다.
하지만 직선을 계속해서 그리다보면 여러분이 보시는 화면이 깜박거리는 현상이 발생됩니다. GDI 선 그리기 마지막에서는 이 문제점의 원인을 확인하고 해결하는 방법에 대해서 알아보도록 합시다.
Win32_API - GDI로 자유 곡선 그리기 (마우스로 글씨 쓰기) (1) | 2022.03.28 |
---|---|
Win32_API - GDI로 선그리기5(깜빡이는 현상 제거/더블버퍼링) (0) | 2022.03.24 |
Win32_API - GDI로 선그리기3(연속해서 여러 선 그리기) (0) | 2022.03.18 |
Win32_API - GDI로 선그리기2 (마우스 동작을 이용해봅시다.) (0) | 2022.03.15 |
Win32_API - GDI로 선그리기1 (0) | 2022.03.14 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet