본문 바로가기

프로그램

[펌]GDI+ 소개

출처 : www.winapi.co.kr

GDI(Graphic User Interface)는 윈도우즈의 핵심 모듈 중의 하나로 주로 출력과 관련된 기능을 담당한다. 화면, 프린터 등의 출력 하드웨어와 응용 프로그램의 중간에 위치하여 장치 독립성을 확보하며 복수 개의 프로그램이 서로의 영역내에서 방해하지 않고 자유롭게 출력하도록 조율한다. 오랫동안 별탈없이 잘 써오긴 했지만 현대의 복잡한 프로그램들의 요구를 충족시키기에는 다소 부족한 점이 많다.

① 기본적인 그래픽 출력은 가능하지만 섬세한 그래픽 표현에는 다소 역부족이다. 예를 들어 점선 펜을 만들 수는 있지만 굵기가 2이상이면 무조건 실선이 되어 버리므로 굵은 점선을 그을 수 없고 NT 이하에서는 비트맵 브러시도 8*8이상의 크기를 지원하지 않아 큰 비트맵 브러시를 쓸 수 없다.

② 그래픽 속성을 바꿀 때마다 GDI 오브젝트를 일일이 생성, 선택한 후 사용해야 하므로 무척 번거롭다. 빨간색 테두리에 파란색 면을 가지는 타원을 하나 그리려면 Ellipse를 호출하기 전에 펜, 브러시 생성 및 선택을 먼저 해야 하고 그린 후에 선택 해제, 파괴까지 해야 한다. 정작 중요한 출력문보다 준비하고 정리하는 코드가 더 많아 무척 불편하다.

③ 실수로 GDI 오브젝트를 해제하지 않을 경우 리소스 누출에 의해 시스템의 안정성을 위협하기도 한다. 비트맵같은 큰 개체를 해제하지 않으면 특히 많은 리소스를 소모하여 더 이상 그리기를 할 수 없는 상태가 되기도 하는데 이는 시스템 다운에 버금갈 정도로 치명적이다.

GDI+는 전통적인 GDI 모듈의 업그레이드 버전이며 복잡한 그래픽을 출력할 수 있고 기존 기능을 최적화한 새로운 출력 모듈이다. GDI의 계승자이므로 장치 독립성을 제공한다는 기본 목적은 동일하며 GDI로 할 수 있는 대부분의 작업을 GDI+로도 할 수 있다. 윈도우즈 XP와 2003에 기본적으로 탑재되어 있으며 닷넷 플랫폼에도 포함되어 있고 64비트 윈도우즈에서도 계속 지원되므로 향후 GDI를 완전히 대체하게 될 것이다. 2000을 포함하여 2000이하의 버전에서는 별도의 모듈을 배포해야만 사용할 수 있지만 GdiPlus.dll 파일 하나만 복사하면 되므로 하위 호환성의 문제도 거의 없는 셈이다.

95/98 이후의 NT/2000에서 GDI도 투명 비트맵 출력, 좌표 변환, 반투명 출력 등 많은 기능 개선이 이루어졌지만 이런 기능은 사실 있어도 마음대로 사용할 수 없었다. 왜냐하면 추가된 함수를 하나라도 사용하게 되면 95/98에서 이 프로그램은 제대로 실행되지 않기 때문이다. 이렇게 만든 프로그램을 95/98 사용자가 쓸 수 있는 유일한 방법은 운영체제를 업그레이드하는 것 뿐이므로 시장을 포기하지 않는 한 이런 함수를 함부로 쓰지 못한다.

그러나 GDI+는 DLL을 같이 복사하면 하위 버전의 운영체제에서도 문제없이 잘 실행되므로 호환성을 걱정할 필요가 없다. 95/98 환경이라도 DLL 파일을 같이 배포하기만 하면 되므로 용량이 약간 늘어난다는 것 외에는 별다른 번거로움이 없는 것이다. DLL의 버전 충돌을 피하기 위해서 DLL을 재배포할 때는 가급적이면 시스템 디렉토리보다 응용 프로그램이 설치되는 디렉토리에 같이 복사하는 것이 안전하며 마이크로소프는 이런 배포 방식을 권장하고 있다.

GDI+를 사용하려면 먼저 플랫폼 SDK를 설치해야 한다. 이 SDK를 다운로드받아 설치하면 GDI+의 헤더 파일과 임포트 라이브러리 등은 물론이고 도움말까지 같이 설치된다. 설치 후 컴파일러의 디렉토리 옵션창에서 Include 경로와 Library 경로에 플랫폼 SDK의 경로를 추가하되 최신 SDK 정보를 가장 먼저 참조하도록 목록의 제일 위쪽으로 이동시켜야 한다.

GDI+는 DirectX의 기능 일부를 사용하므로 컴파일러가 최신 정보를 참조할 수 있도록 반드시 목록의 제일 위쪽에 두어야 한다. 그렇지 않으면 제대로 컴파일되지 않는다. 플랫폼 SDK만 설치하면 이후부터 비주얼 C++ 6.0에서도 GDI+를 프로그래밍할 수 있다. 이외에 릴리즈 후에 발견된 JPEG 출력 모듈의 보안 취약점 해결을 위한 패치 등을 다운로드 받아 설치하는 것이 좋다.

GDI+와 함께 설치되는 플랫폼 SDK 도움말에는 GDI+의 거의 모든 것들이 완벽하게 기록되어 있다. 친절한 자습서는 물론이고 컴파일해 볼만한 예제와 각 클래스의 멤버에 대한 정보, 함수에 대한 도움말, 고급 기법에 대한 문서 등이 수록되어 있으므로 이 도움말만 순서대로 읽어 봐도 GDI+는 쉽게 정복할 수 있다. 물론 영어로 되어 있다.

GDI+는 최신 라이브러리인만큼 객체 지향적인 C++언어로 작성되어 있다. 그래서 C컴파일러에서는 이 라이브러리를 사용할 수 없다는 문제점이 있기는 하지만 요즘의 컴파일러들은 대부분 C++언어를 잘 지원하므로 개발툴의 제약도 거의 없는 셈이다. GDI+는 GDI의 기능을 개선한 클래스 라이브러리이므로 일단 GDI에 대해서 잘 알고 있어야 하며 C++ 언어의 기본적인 사용 방법에 대해서도 충분히 숙지하고 있어야 한다.

GDI+는 기초적인 C++문법만을 요구하므로 C++에 대한 해박한 지식을 요구하는 정도는 아니다. 상속이나 가상 함수, 템플리트 같은 고급 기법까지는 모르더라도 객체안에 속성과 함수가 캡슐화되어 있다는 것과 객체가 생성 파괴될 때 자동으로 호출되는 함수가 있다는 것 정도만 알아도 GDI+를 배우고 사용할 수 있다. GDI+를 공부해 보면 왜 C++이 좋은가를 실감할 수 있을 것이다.

'프로그램' 카테고리의 다른 글

com.sun.tools.javac.Main 에러문제  (0) 2008.06.08
php 모듈 확장 방법 그리고 mysql 실행 안될때...  (0) 2008.02.19
당분간 FTP 서버 중지...  (0) 2007.11.07
DDK 관련 자료들  (0) 2007.11.06
리눅스 그래픽 시스템  (0) 2007.11.06