본문 바로가기
프로그래밍/MFC

MFC-도형 그리기

by 리뷰하는 (게임)프로그래머_리프TV 2010. 5. 16.



기본적으로 그리기를 제공하는 원이나, 사각형이 아닌

삼각형을 포함한 다각형을 그리고 싶을 때 어떻게 해야 하는지,

먼저 예제를 보자.

//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