#10. Windows 그래픽의 기초 – Revision #1

Windows 그래픽은 클라이언트 영역에서 모든 것을 다 소화하게 된다. 그리고, 이 클라이언트 영역이라 함은 Device Context와 GDI와 뗄레야 뗄 수 없는 바늘과 실과 같은 격이다.


사실 여기서 그래픽 옵션에 대해서 모두 다룬다는 것은 불가능한일이다. 다만, MSDN 라이브러리나 완벽 가이드를 참고하여 기본적인 사용방법만을 알아두길 바랄 뿐이다.


우선, 그래픽의 기반이 되는 클라이언트 영역을 사용하려면 주소값을 얻어올 필요가 생긴다. 그래서, 방법이 두 가지가 존재한다.


1. Device Context란?


직역하여, 장치 문맥이란 말로 이것만으론 어디에 써먹는 물건인지 알 수 없다. 사실, Windows에서 어떤 장치에 대한 그래픽을 구현하기 위해서는 굉장히 많은 것을 포함하여야 하는데, 이것을 Device Context, 이하 DC라고 부른다. DC는 비단 클라이언트 영역에 대해서만 반영되는 것이 아니다. 프린터의 DC가 존재하고, 모뎀 (아래 참조)의 DC가 존재할 수도 있으며 심지어는 파일에 대한 DC도 존재하기도 한다.


2. Graphic Device Interface란?


이하 GDI라고 하는 것으로, VGA/SVGA/EGA 시리즈와 같은 물리적인 그래픽 어댑터에 대하여 함수를 사용한 액세스를 위한 인터페이스를 가리킨다. 쉽게 풀어설명하면, 화면상에 출력하기 위한 그래픽 사용법정도가 될 수 있을 것이다.


3. GDI Object란?


GDI를 좀 더 가지런히 캡슐화시킨 것에 대해서 부가적으로 그리기 도구를 더한 것으로 볼 수 있겠다.


4. DC를 공짜로 얻는 방법 두 가지.


DC를 어렵게 생각하고 취급한다면 그만큼 어려운 법. DC를 하찮은 도화지 한 장으로 여기면서 해보는 것은 어떨까?


– CDC 클래스를 통하여…


CDC *pDC = GetDC();


pDC->…(…, …);


ReleaseDC(pDC);


– CClientDC 클래스를 통하여…


CClientDC dc(this);


// dc.~~~


위 두개의 구문의 차이점은 바로 DC 리소스의 반환 여부에 따른 것이다. CDC 클래스를 통하여 DC를 얻는 것은 가장 일반적이다. 하지만, 약간의 불편을 감수해야 하는데, 반드시 Windows로 DC 리소스를 환원해야만 한다. 환원하지 않더라도 당장은 문제가 없겠지만 시스템 사양은 유한적인 것이므로 제아무리 서버급 시스템일지언정 언젠가는 STOP Error (일명 파란화면)을 불러올 수도 있음을 명심해야 한다. 따라서, 이러한 오류를 미연에 방지하기 위해서 ReleaseDC()를 쓰는 것을 잊어서는 안된다.


하지만, CClientDC의 경우는 좀 다르다. CClientDC 클래스는 CDC 클래스보다 하위의 클래스이며 약간의 기능이 더 보탬되어있는 CDC 클래스의 확장판적인 성격을 띄는 클래스라고 정의할 수 있겠다. 이것으로 DC를 얻게되면 굳이 ReleaseDC()를 쓰지 않아도 알아서 환원된다. 이것이 가능한 이유는 다름이 아니라 CClientDC 클래스의 소멸자 (Destroyer) 함수에 DC를 자동으로 반환하도록 하는 정확한 구문이 포함되어있다. 이로서, DC를 반환하지 않음으로서 발생할 수 있는 다양한 문제점들을 한꺼번에 모두 해결할 수 있는 것이다.


참고로, 이제까지 설명한 내용 모두는 CView나 CScrollView 클래스로부터 상속받았을 때에만 적용될 수 있는 내용임을 참고하면 좋겠다. CRichEditView나 CFormView와 같은 것에 대해서는 적용될 수 없다.


– 모뎀 : MOdulation/DEModulation의 약어로 변조와 복조를 수행하는 변복조기로 일컬어지기도 한다. 초창기의 모뎀은 전화선의 아날로그 신호와 컴퓨터의 디지털 신호를 변환하는데에 그 주 목적이 있었는데 반하여 요즈음은 빠르고 정교하며 완벽한 전송을 위하는 형태로 공정되고 있는 추세이다. 요즈음같은 ADSL/xDSL 네트워킹에서는 PC와 독립적인 하드웨어로 동작하며, 이전의 전화선 기반 모뎀은 PC에서 인지하여야 사용할 수 있는 형태였다. MFC에서 말하는 모뎀의 DC란 바로 전화선 기반의 모뎀을 의미한다.

댓글 남기기