윈도우 화면에 무엇인가를 출력하려면, 항상 꼭 필요한 것이 이 DC이다.

보통 처음 프로그래밍을 배울 때는 항상 그냥 DC가 필요하니 GetDC를 해서 쓰고, 릴리즈 하고.. 머 이런식으로 DC 자체에 대

해서는 쉽게 그냥 지나치기 쉽다.

하지만 무언가를 사용하기 위해서는, 그 것의 원리를 이해해야 머리속에 오래 남아있는 법이니.. DC에 대해서 알아보자..

 일단 윈도우는 크게 세 가지 동적 라이브러리로 구성되어 있는데, 메모리를 관리하고 프로그램을 실행시키는 KERNEL, 유저

인터페이스와 윈도우를 관리하는 USER, 화면 처리와 그래픽을 담당하는 GDI가 있다... API 함수들의 대부분은 이 세 가지

DLL에 의해 제공 된다.
 
 이 중에 출력을 하려면 우리는 GDI(Graphic Device Interface ) 모듈을 이용해야 한다.

 DC(Device Context ) 란 출력에 필요한 모든 정보를 가지는 데이터 구조체이며, GDI 모듈에 의해 관리된다.

그렇다면 DC는 왜 필요한 것일까??

상황을 가지고 생각하면, 쉽게 정리가 된다.... 선을 하나 그릴려고 하면.. 점 2개가 있으면 선을 그을 수 있다... 하지만... 잘 생

각해보면, 좌표값 2개도 중요하지만, 선의 색, 굵기,모양, 혹은 점선이라던지 여러가지 방법 등등, 속성 값을 넣자면, 하나둘이

아니다.. 이럴 때 DC를 이용하면, 기본적으로 DC에 default값이 저장되어 있기 떄문에, DC와 좌표 2개면 충분해진다. 혹시 바

꾸고 싶은 속성이 있다면 얻어온 DC에서 바꾸고 싶은 부분만 바꾸면 충분하다.

또 DC에는 현재 윈도우의 값도 가지고 있다... 이것이 제일 중요한 부분인데.. 아까 라인을 예로 들었는데, 좌표 2개를 줬다고

치면, 0,50 에서 100, 150 까지 가는 선을 그리고 싶었는데 그것이 화면 좌표를 기준으로 0,50 부터 100, 150인지 현재 윈도우의

클라이언트 영역의 0,0을 기준으로 하는지를 모르면, 잘못된 값이 나올 수 있다. 하지만 DC는 현재 윈도우의 DC를 보통 Get

해오기 때문에 자동으로 현재 윈도우를 기준으로 좌표를 설정하여 그려준다.

 또 클리핑 영역(윈도우가 2개이상 겹쳤을 때 상위에 가려진 하위 부분은 그릴 필요가 없다. 그 영역을 말함 ) 을 자동으로 계산

해 주어, 뒷 영역의 윈도우의 그림이 앞 윈도우를 침범하지 못하도록 해 준다....

 흔히 에이 윈도우는 당연히 뒤에 그림이 가려지지 라고 생각한다면... 그것은 다 윈도우를 프로그램한 프로그래머가 그렇게 만

들어 두었기 때문이지.. 원래 그렇지는 않다. 화면에 찍히는 랜더링 장면들은 순서에 영향을 받기 때문에 이런 처리가 없다면,

당황스러운 결과가 나올 수 도 있다..

어쨌든 정리해보면,, DC는 위와 같은 역할들을 하고 또 위와 같은 정보들을 가지기 때문에, 선을 그린다던지 도형을 그린다던

지 하는 함수의 제일 첫 인자는 항상 DC를 받아와서 쓴다....

'프로그래밍 > API' 카테고리의 다른 글

[API] DC 를 이용한 문자열 출력  (0) 2011.08.07
[API] 다양한 현재시간과 현재날짜 얻기  (1) 2011.08.05
[API] 커서 바꾸기..  (0) 2011.08.03
[API] 메시지 루프  (0) 2011.08.02
[API] 윈도우 생성..  (0) 2011.08.02
Posted by 바람처럼..
|