Programming Language/Windows API

shape

D4tai1 2018. 8. 27.

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

댓글