2007년 4월 23일 월요일

별그리기 (CRgn)

// 다각형의 모양을 가지는 점들의 집합을 준비합니다.
// 여기는 별만 그리지만 삼각형도 똑 같습니다.
// 그리는 모양은 마음대로 바꾸세요.
CPoint points[11];

// 72' 씩 회전된 꼭지점으로 이루어진 점 생성
// 여기서 알아서 모양을 만드세요.
double Pi = 3.14159265359;

for ( int i = 0; i < 10; i += 2 )
{
// 별의 바깥쪽 꼭지점 (큰 반지름으로 만듬)
points[i].x = (long)(25*cos((double)(i*72*Pi)/360.0));
points[i].y = (long)(25*sin((double)(i*72*Pi)/360.0));

// 별의 안쪽 꼭지점 (작은 반지름으로 만듬)
points[i+1].x = (long)(10*cos((double)((i+1)*72*Pi)/360.0));
points[i+1].y = (long)(10*sin((double)((i+1)*72*Pi)/360.0));
}

// 끝점은 첫점과 같게 맞춤니다.
points[10] = points[0];

CRgn rgnStar;
rgnStar.CreatePolygonRgn(points, 11, WINDING);

// 클라이언트 영역을 가져옵니다.
CRect r;
GetClientRect(&r);

// 그림 그릴 브러시를 초기화합니다.
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));

// 영역을 초기화 합니다.
CRgn rgn;
rgn.CreateRectRgn(0, 0, 0, 0);
rgn.CopyRgn(&rgnStar);
rgn.OffsetRgn(point.x, point.y);

// 별을 그립니다.
dc.FillRgn(&rgn, &brush);

댓글 없음: