shape
1. 도형그리기
1) my.h 소스
void my_point(HDC hdc); void my_movedraw(HDC hdc); void my_circle(HDC hdc); void my_rectangle(HDC hdc); void my_polygon(HDC hdc, LPPOINT point, int cnt);
2) my.cpp 소스
#include "stdafx.h"
#include "shape[1].h"
#include "my.h"
void my_point(HDC hdc) {
MoveToEx(hdc, 150, 100, NULL);
//4번째 매개변수는 LPPOINT 타입으로 POINT * 형과 같고,
//POINT 타입은 한 점의 좌표을 저장하는 구조체 타입으로
//long형인 x와 y 2개가 존재한다.
}
void my_movedraw(HDC hdc) {
LineTo(hdc, 250, 100);
}
void my_circle(HDC hdc) {
Ellipse(hdc, 250, 50, 350, 150);
}
void my_rectangle(HDC hdc) {
Rectangle(hdc, 50, 50, 150, 150);
}
void my_polygon(HDC hdc, LPPOINT point, int cnt) {
Polygon(hdc, point, cnt);
}
+) 소스설명
[1] MoveToEx(hdc, 150, 100, NULL)
- 출력영역의 속성(선색, 선모양 등)과 x좌표, y좌표를 입력 후
4번째 매개변수는 이전 위치좌표를 보통 저장하지만 NULL을 입력해도 무방하다.
- 직선을 그릴 때는 두 점의 좌표가 있어야 하고 그 중 직선의 시작점을 의미한다.
[2] LineTo(hdc, 250, 100)
- 직선의 끝점을 지정 후 시작점에서부터 직선을 그린다.
- 출력영역의 속성과 x좌표, y좌표를 매개변수로 넣는다.
[3] Ellipse(hdc, 250, 50, 250, 150)
- 원을 그리는 함수이다.
- (x1, y1) , (x2, y2) 로 입력을 하여 두 점을 기준으로 사각형을 가상으로 만들고 사각형에 내접하는 원을 그린다.
[4] Rectangle(hdc, 50, 50, 150, 150)
- 사각형을 그리는 함수이다.
- (x1, y1) , (x2, y2) 로 입력을 하여 두 점을 기준으로 사각형을 그린다.
[5] Polygon(hdc, point, cnt)
- 다각형을 그리는 함수이다.
- 다각형의 좌표가 들어있는 point의 주소에 있는 정보로 좌표를 확인하고, cnt는 좌표의 개수를 의미한다.
3) caret.cpp 소스
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 메뉴 선택을 구문 분석합니다.
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
POINT p;
POINT point[5] = {
{400, 100}, {500, 50}, {450, 200}, {400, 250}, {420, 200}
};
RECT rect;
//직선그리기
my_point(hdc);
my_movedraw(hdc);
//원그리기
my_circle(hdc);
//사각형그리기
my_rectangle(hdc);
//다각형그리기
my_polygon(hdc, point, 5);
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
+) 소스설명
[1] POINT point[5];
- x와 y로 구성되어 있는 POINT 타입의 구조체를 5개 생성하여 값을 저장한다.
- 하나의 구조체 당 2개의 값을 x좌표와 y좌표 순서로 입력한다.
[2] my_polygon(hdc, point, sizeof(point) / 8)
- 매개변수 전달 시 point는 구조체배열의 시작주소를 의미한다.
- sizeof(point) / 8은 좌표(꼭지점)의 개수를 의미한다.
4) 추가사항
[1] BOOL Polyline(HDC hdc, CONST POINT *lppt, int cPoints)
- 위 함수를 이용하면 다각선을 그릴 수 있다.
- Polygon( )[다각형] 함수와 동일하며 차이는 시작점과 끝점이 같으면 다각형이고, 다르면 다각선을 의미한다.
- 두 번째 파라미터는 LPCPOINT point 로 상수형 포인터구조체의 주소를 의미한다.
- 세 번째 파라미터는 꼭지점의 개수를 의미한다.
[실행화면]
'Programming Language > Windows API' 카테고리의 다른 글
| 마우스로 도형 옮기기 (0) | 2018.09.30 |
|---|---|
| keyboard[마지막] (0) | 2018.09.10 |
| caret (0) | 2018.08.27 |
| keyboard[6] (0) | 2018.08.27 |
| keyboard[5] (0) | 2018.08.27 |
댓글