본문 바로가기

공부/MFC

Visual C++ 2008 MFC Chapter 7 GDI - 2

 펜과 브러시.

 일단 펜을 바꾸어 

그리는 사각형의 테두리를 변경하는 코드를 짜보자.

아까 OnPaint()의 함수에 코드를 추가 수정하여 다음과 같이 짠다.

/////////////////////////////////////////////////////

void CRedrawDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.
CPen NewPen(PS_SOLID, 3, RGB(192, 0 , 0)); //두께가 3픽셀인 붉은 색 펜을 생성한다.

CPen*pOldPen = dc.SelectObject(&NewPen); //생성한 펜을 DC의 현재 펜으로 변경하고 기존 펜 객체에 대한 포인터를 별도로 저장해둔다.

dc.Rectangle(120,10,220,110);//그리기 작업을 수행한다.

dc.SelectObject(pOldPen); //예전 펜을 현재 펜으로 한다.

dc.Rectangle(320,10,420,110); //예전 펜[기본펜] 으로 된 사각형을 그려본다.

}


//////////////////////////////////////////////////

책에는 없는 내용이 맨 마지막 줄의 코드이다. 이는 현재 펜으로 기본펜 을 다시 정의한 후[그러니까 검은색 기본 굵기의 기본펜 ]

사각형을 우측에 하나 더 그려본다는 이야기 이다.

이렇게 짜고나서 나오는 화면은 다음과 같다.


CPen클래스는 GDI의 펜 속성을 객체화 한 클래스로서 

CPen NewPen(PS_SOLID, 3, RGB(192, 0 , 0)); //두께가 3픽셀인 붉은 색 펜을 생성한다. 

에서 두께가 3이고 색이 빨간색인 일반실선(PS_SOLID)펜을 생성하고 있다.

그 후에 입력된 코드에 의해 그려진 사각형의 실선이 변경됨을 알 수 있다.

그리고 새로운 GDI객체로 DC의 속성을 변경했을 시에 SelectObject()함수를 사용하여 기본 속성으로 재변경 하지 않을 경우 GDI리소스를 낭비하여 후에 문제가 생긴다고 하니 이 점을 유의해야 할 겉이다.


//////////////////////////////////////////

마찬가지로 펜이 아닌 브러쉬 [색칠] 를 바꾸어보자.

함수명만 좀 다르고 하는 방식은 똑같다.

코드는 다음과 같다.


/////////////////////////////////////////
void CRedrawDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.
CPen NewPen(PS_SOLID, 3, RGB(192, 0 , 0)); //두께가 3픽셀인 붉은 색 펜을 생성한다.
CPen*pOldPen = dc.SelectObject(&NewPen); //생성한 펜을 DC의 현재 펜으로 변경하고 기존 펜 객체에 대한 포인터를 별도로 저장해둔다.

CBrush NewBrush(RGB(192,192,192)); //새로운 브러시를 생성하여 선택한다.
CBrush*pOldBrush = dc.SelectObject(&NewBrush); //펜과 마찬가지로 기존 브러쉬 객체에 대한 포인터를 별도로 저장해둔다.


dc.Rectangle(120,10,220,110);//그리기 작업을 수행한다.

dc.SelectObject(pOldPen); //예전 펜을 현재 펜으로 한다.
dc.SelectObject(pOldBrush); //예전 브러쉬를 현재 브러쉬로 한다.

dc.Rectangle(320,10,420,110); //예전 펜/브러쉬[기본펜과 기본 브러쉬]로 된 사각형을 그려본다.

}
 
//////////////////////////////////////////////

출력화면과 파일.