GDI 와 기능적으로 같지만 50가지가 넘는 다양한 패턴을 제공하며, 그라데이션 채우기도 가능하다. 다음은 청색의 단색 브러시를 만들어서 도형을 채우는 예이며 주의할 점은 도형을 채우는 함수는 그리는 함수와 다르다는 것이다.
void CGdiPlusDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
//SolidBrush 클래스는 단색 브러시를 객체화한 클래스이다.
SolidBrush solidbrush(Color(255,0,0,255));
//다음은 FillXXX() 로 되어있는데 이는 앞서 배운 DrawXXX() 메서드에 대응한다.
graphics.FillRectangle(&solidbrush, 20,20,100,100);
graphics.FillEllipse(&solidbrush, 150,20, 100,100);
graphics.FillPie(&solidbrush, 300,20,100,100,180.0f, 90.0f);
//graphics.FillClosedCurve(&solidbrush,pts,6,FillModeAlternate);
}
빗살 무늬 브러쉬
다음 코드는 빗살 무늬 브러쉬로 어떤 것이 있는지 나열한 예이다.
void CGdiPlusDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
int nStyle = HatchStyleHorizontal;
int nCounter = 0;
for(int y=0; y<6; ++y)
{
for(int x=0; x<10; ++x)
{
HatchBrush hatchbrush(
(HatchStyle)(nStyle+nCounter), //HatchStyle 열거형
Color::Black, //전경색
Color::Transparent); //배경색
graphics.FillRectangle(&hatchbrush,
x*50+20, //x좌표
y*40+20, //y좌표
40,30); //너비 및 높이
nCounter++;
if(nCounter >= HatchStyleMax) break;
}
}
그라데이션 브러시
그라데이션 브러시를 활용하면 CDC 클래스의 GradientFill() 메서드를 이용하는 코드를 대체할 수 있으며 영역을 칠하는 개념이 아닌 브러시로 객체화됨으로써 그라데이션 채우기를 적용하는 범위가 매우 다양해졌다. 다음은 그라데이션 브러시를 생성하여 도형을 채우는 예제다.
void CGdiPlusDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
dc.TextOut(25,25,_T("Gdi+ gradient test string"));
LinearGradientBrush lgBrush(
Point(0,0), //0,0좌표에서
Point(100,100), //100,100 좌표를 향해 그라데이션 채우기를 적용하라.
Color(128,221,236,255),
Color(255,86,125,204)
);
// 즉 두 좌표가 만든 선과 수직인 선을 기준으로 기울기가 결정한다.
//LinearGradientBrush lgBrush(
// Rect(10,10,200,200),
// Color(128,221,236,255),
// Color(255,86,125,204),
// LinearGradientModeVertical //수직으로 주자.
// );
//다음이 직접 각도를 명시하는 직관적인 코딩이다.
//LinearGradientBrush lgBrush(
// Rect(10,10,200,200),
// Color(128,221,236,255),
// Color(255,86,125,204),
// 90.0f, FALSE // 직접 각도를 45도로 주자.
// );
graphics.FillRectangle(&lgBrush, 0,0,600,200);
}
텍스처(Texture) 브러쉬
비트맵 패턴 브러시를 만드는 것은 GDI 에서도 가능했으며, 단순히 바둑판 형식으로 배열하는 것만 지원했었다. 그리고 JPG나 GIF 파일을 로드하여 브러시로 만드는 것에도 복잡한 과정이 필요했으나 GDI+ 에서는 Image 클래스를 활용하여 다양한 이미지 리소스를 활용하도록 지원이 된다. 또한 TextureBrush 클래스를 제공하여 이미지의 배열 규칙의 다양성을 확대하고 있다. 다음 코드는 뷰 윈도우의 클라이언트 영역을 칠하는 예이며, 화면을 둘로 나누어 왼쪽은 GDI처럼 바둑판식으로, 오른쪽은 이미지 배열 모드를 변경하여 수평/수직으로 뒤바뀐 패턴으로 배열한다.
void CGdiPlusDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
Image Image(_T("Texture.jpg"));
TextureBrush txBrush(&Image, WrapModeTile);
CRect rectClient;
GetClientRect(&rectClient);
graphics.FillRectangle(&txBrush,0,0,rectClient.Width()/2, rectClient.Height());
txBrush.SetWrapMode(WrapModeTileFlipXY); //FlipX는 좌우를 뒤집어서 출력하라. FlipY는 상하를 뒤집어라.
graphics.FillRectangle(&txBrush,rectClient.Width()/2, 0, rectClient.Width()/2, rectClient.Height());
}
'Windows > MFC' 카테고리의 다른 글
GDI+ , 글꼴과 문자열 그리기 그리고 출력 형식 (0) | 2011.12.13 |
---|---|
GDI+ , 외부 이미지 파일의 처리 (Image Class) (0) | 2011.12.13 |
GDI+ , 도형 그리기 (0) | 2011.12.13 |
GDI+ , 펜과 직선 그리기, 꺽임/끝 부분 처리, 곡선과 안티 에일리어싱 (0) | 2011.12.13 |
데이터베이스 :: OLE-DB (0) | 2011.11.23 |