2011년 4월 11일 월요일

MFC에서 GDI+ 사용하기

1. Anti alias 라인을 그리기 위한 GDI+ 를 사용

Step1. stdafx.h 에 선언추가

#include
#pragma comment(lib, "gdiplus")
using namespace Gdiplus;



Step2. 초기화

[ProjectName]App.c 파일의 InitInstance() 함수에 초기화를 추가한다.

GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

그리고 아래 두 라인을 광역변수로 추가한다.

GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;



Step3. 정리

[ProjectName]App.c 파일의 ExitInstance() 함수(없으면 만든다)에 정리코드를 추가한다.

GdiplusShutdown(gdiplusToken);



Step4. 사용

Graphics graphics( pDC->m_hDC );
graphics.SetSmoothingMode( SmoothingModeAntiAlias );
Color c(50,200,255);
Pen p(c, 1.0);
Gdiplus::PointF p1, p2;
p1.X = 0.0;
p1.Y = 0.0;
p2.X = 100.0;
p2.Y = 10.0;

graphics.DrawLine (&p, p1, p2);



2. Pen : 연결된 선의 꺽임 처리

p.SetLineJoin (LineJoinRound);

enum LineJoin
{
    LineJoinMiter = 0,
    LineJoinBevel = 1,
    LineJoinRound = 2,
    LineJoinMiterClipped = 3
};






3. Pen : 선의 시작과 끝부분 처리

p.SetStartCap(LineCapRoundAnchor);
p.SetEndCap(LineCapArrowAnchor);

enum LineCap
{
    LineCapFlat = 0,
    LineCapSquare = 1,
    LineCapTriangel = 3,

    LineCapNoAnchor = 0x10,
    LineCapSquareAnchor = 0x11,
    LineCapRoundAnchor = 0x12,
    LineCapDiamondAnchor = 0x13,
    LineCapArrowAnchor = 0x14,

    LineCapCustom = 0xff,
    LineCapAnchorMask = 0xf0
}





4. 안티엘러어싱 적용

graphics.SetSmoothingMode(SmoothingModeHighQuality);

enum SmoothingMode
{
//XP이상 사용가능
SmoothingModeInvalid =QualityModeInvalid,
SmoothingModeDefault =QualityModeDefault,
SmoothingModeHighSpeed =QualityModeLow,
SmoothingModeHighQuality =QualityModeHigh,
SmoothingModeNone,
SmoothingModeAntiAlias,
#if(GDIPVER>=0x0110)
//비스타 이상 버전에서만 사용가능..
SmoothingModeAntiAlias8x4 =SmoothingModeAntiAlias,
SmoothingModeAntiAlias8x8
#endif//(GDIPVER>=0x0110)
};




5. 부드러운 선그리기

graphics.DrawCurve(&p, points, 6, 0.5f);

Struct DrawCurve(const Pen* pen, const Pointf* points, INT count, REAL tension);
arg1: Pen클래스 객체의 주소
arg2: Point배열 클래스의 주소
arg3: 두번째로 전달 받은 Point배열의 클래스 객체의 수..
arg4: 곡선을 그릴때 각이 생기지 않도록 끝을 강제로 늘려주는 장력을 명시 한다.




 

댓글 없음: