2008/03/10

Turbo C++ Explorer 에서 GDIPlus 사용하기

Turbo C++  Explorer 에서 GDIPlus 사용하기

TC++ 에서 GDIPlus 를 사용하려면 우선 GDIPlus.dll 에서 C++ Builder 용으로 library 파일을 만들어야 한다.

그 방법은 도스 명령창에서 다음 명령을 수행하면 C++ Builder 용 library 파일이 생성된다.

implib -c -f gdiplus.lib gdiplus.dll

다음으로 프로젝트에 library 파일을 링크시켜준다.(소스 위치 어느 곳이든 상관 없이 다음을 입력 한다.)

#pragma comment(lib, "gidplus.lib")



그리고 GDIPlus사용에 필요한 헤더 파일을 include 시킨다.

#include <windows.h>
#include <algorithm>
#include <gdiplus.h>



마지막 준비로 #define STRICT 를 선언해 준다. vcl.h 이전에 포함시켜주면 되는데 더 편하게 프로젝트 옵션에 Conditional defines 에 입력하면 된다.

이제 준비를 다 마쳤고 GDIPlus를 사용하면된다.

우선 헤더파일에 다음 변수를 선언한다.

    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;



그리고 나서 Form 을 생성시에 아래와 같이 초기화를 해주고

    // Initialize GDI+.
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);



마지막으로 폼 종료전에 GDIPlus 를 shutdown 시켜준다.

    //Shutdown GDI+
Gdiplus::GdiplusShutdown(gdiplusToken);



이제 OnPaint 부분에 맘껏 사용하면 된다.

    Gdiplus::Graphics g(Canvas->Handle);

Gdiplus::Pen pen(Gdiplus::Color(255, 0, 0), 2);
g.DrawLine( &pen, 10.5f, 10.3f, 120.3f, 192.2f);



아래 소스는 GDIPlus 를 좀더 편하게 쓰고자 작성한 아주 간단한 Wrapper 클래스 이다.
현재는 GDIPlus 시작과 종료만을 구현 했으나 추후 기능을 더 보강해 사용할  수 있다.

// Header file
#ifndef uGdiplusH
#define uGdiplusH
//-----------------------------------------------------------------
#pragma comment(lib, "gdiplus.lib")

#define STRICT
#include <windows.h>
#include <algorithm>
#include <gdiplus.h>

class TGDIPlus
{
public:
__fastcall TGDIPlus();
virtual __fastcall ~TGDIPlus();

private:
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
};
#endif


// Source file
//-----------------------------------------------------------------
#pragma hdrstop

#include "uGdiplus.h"

//-----------------------------------------------------------------

#pragma package(smart_init)

__fastcall TGDIPlus::TGDIPlus()
{
// Initialize GDI+.
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
}

__fastcall TGDIPlus::~TGDIPlus()
{
//Shutdown GDI+
Gdiplus::GdiplusShutdown(gdiplusToken);
}


// Using Example
// 선언
#include "uGdiplus.h"

TGDIPlus* m_pGdiplus;

// 생성
m_pGdiplus = new TGDIPlus();

// 해제
delete m_pGdiplus;



No comments :

Post a Comment