2007년 4월 3일 화요일

VC++ 2005에서 GDIPLUS 사용하기

GDI와 GDI+의 차이점

    경계선을 그리는 기능과 안쪽을 칠하는 기능을 분리
    선그리기 기능 : MotoTo나 LineTo가 아니라 DrawLine 사용
    GDI 오브젝트를 항상 명시
    알파 블렌딩 지원
    미세한 제어 : 선의 패턴이나 끝부분 처리 등...
    
GDI+에서 사용하는 데이터형식

    INT, REAL
    Point, PointF, Rect, RectF
    Wide Character 인코딩 : L"Hello"

GDI+ 사용방법

1. GDI+ 초기화

    1) stdafx.h 의 맨 아래 줄에 다음 추가

    #include "gdiplus.h"
    using namespace Gdiplus;
    
    2) Startup & Shutdown

    CWinApp 파생클래스에 다음 변수 선언

    class CTestApp : public CWinApp
    {
        ...
        ULONG_PTR m_gdiplusToken;
        ...
    }
    
    InitInstance() 및 ExitInstance()에 다음 추가

    BOOL CTestApp::InitInstance()
    {
        ...
        CWinApp::InitInstance();
        GdiplusStartupInput gdiplusStartupInput;
        GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
        ...
    }

    int CTestApp::ExitInstance()
    {
        GdiplusShutdown(m_gdiplusToken);
        return CWinApp::ExitInstance();
    }

2. 라이브러리 추가

    Project 속성 메뉴 > 링크 > 입력 에서 추가 종속성에 "gdiplus.lib" 입력

    또는

    using namespace Gdiplus; 아래에 
    
    #pragma comment(lib, "gdiplus")

    추가한다.

3. GDI+ 사용

    void CTestApp::OnDraw(CDC* pDC)
    {
        Graphics g(pDC->m_hDC);
        Pen pen(Color(255, 0, 0, 0), 3);

        g.DrawLine(&pen, 50, 50, 500, 50);
        g.DrawRectangle(&pen, 50, 100, 200, 100);
        g.DrawEllipse(&pen, 300, 100, 200, 100);
        g.DrawPie(&pen, 50, 250, 200, 200, 225, 90);
        g.DrawArc(&pen, 300, 250, 200, 200, 225, 90);
    }

댓글 1개:

익명 :

정말 감사합니다
드디어 빛이 보이는군요....^^