기본적으로 그리기를 제공하는 원이나, 사각형이 아닌
삼각형을 포함한 다각형을 그리고 싶을 때 어떻게 해야 하는지,
먼저 예제를 보자.
//View::OnPaint
LOGBRUSH lb;
lb.lbStyle = BS_SOLID;
lb.lbColor = RGB( 100, 100, 100 );
CPen NewPen;
// 여기서 PS_JOIN_MITER가 추가 되었는데
// 이 외에도, ROUND, BEVEL이 존재.
NewPen.CreatePen( PS_GEOMETRIC | PS_ENDCAP_FLAT | PS_JOIN_MITER, 20, &lb );
CPen* pOldPen = dc.SelectObject( &NewPen );
CBrush NewBrush( RGB( 0, 0, 192 ) );
CBrush* pOldBrush = dc.SelectObject( &NewBrush );
// BeginPath를 사용해 각각의 선들을 합쳐 도형을 만들 수 있다.
dc.BeginPath();
dc.MoveTo( 190, 40 );
dc.LineTo( 290, 190 );
dc.LineTo( 90, 190 );
dc.LineTo( 40, 40 );
dc.LineTo( 190, 40 );
// EndPath를 사용해 그 끝을 지정
dc.EndPath();
// 이 함수가 테두리와 도형을 렌더링 하게 된다.
dc.StrokeAndFillPath();
dc.SelectObject( pOldBrush );
dc.SelectObject( pOldPen );
다음 처럼 WM_PAINT에 소스 코드를 작성하게 되면,
화면에 사다리꼴? 같은 사각형이 보여지게 될 것이다.
각 코드가 무슨 일을 하는지에 대해서는 주석으로 설명해 놓았고,
여기서 한단계 더 발전하여 조금더 간단하게 출력하는 방법이 존재한다.
//View::OnPaint
// 스타일을 저장할 LOGBRUSH
LOGBRUSH lb;
lb.lbStyle = BS_SOLID;
lb.lbColor = RGB( 100, 100, 100 );
CPen NewPen;
// 여기서 PS_JOIN_MITER가 추가 되었는데
// 이 외에도, ROUND, BEVEL이 존재.
NewPen.CreatePen( PS_GEOMETRIC | PS_ENDCAP_FLAT | PS_JOIN_MITER, 20, &lb );
CPen* pOldPen = dc.SelectObject( &NewPen );
CBrush NewBrush( RGB( 0, 0, 192 ) );
CBrush* pOldBrush = dc.SelectObject( &NewBrush );
// POINT 변수를 생성해 각각의 주소를 기억하게 한 후,
POINT arPt[5] = {{20, 20}, {140, 20}, {140, 140}, {70, 180}, {20, 140}};
// Polygon 함수를 사용해 이전과 같이 도형을 그려 주고 있다.
dc.Polygon( arPt, 5 );
dc.SelectObject( pOldBrush );
dc.SelectObject( pOldPen );
화면에 5각형을 그려 보았다.
'프로그래밍 > MFC' 카테고리의 다른 글
MFC-가상 버튼 만들기 (0) | 2010.05.16 |
---|---|
MFC-부채꼴 그리기 (0) | 2010.05.16 |
MFC-선 그리기 (0) | 2010.05.16 |
MFC-GDI의 개념 (0) | 2010.05.16 |
MFC-마우스 입력( TRACKMOUSEEVENT ) (0) | 2010.05.16 |