블로그 이미지
대갈장군

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2009. 3. 11. 04:45 프로그래밍/Windows API
OpenGL 프로그램을 주로 작성하면 사실 Windows API에 대해서 많은 지식이 필요하지 않지만 늘 듣는 말에 대해서는 알아둘 필요가 있는데 아무래도 넘버 1이 Device Context가 아닌가 싶다.

알고 있으면 쉽지만 모르면 알쏭달쏭한 것이 Device Context이다.

기본적으로 Windows는 세가지 동적 연결 라이브러리 (DLL)로 구성되는데 메모리와 프로그램을 관리하는 KERNEL, 유저 인터페이스와 윈도우를 관리하는 USER, 그리고 화면 처리와 그래픽을 담당하는 GDI이다.

GDI는 풀어서 쓰면 Graphic Device Interface인데 한글로 다시 풀어 설명하면 '그래픽 장치 접속 (접근) 함수'이다.

한글로 풀어쓰니 우끼다.. ㅋㅋㅋ

GDI를 통해서 우리는 화면에 글도 쓰고 그림도 넣는 것이다. 그러므로 간단히 생각해도 GDI와 Device Context (DC)가 관계되어 있다는 것을 알수 있다.

일단 답부터 말하면 DC는 걍 구조체이다. 그 구조체 안에는 각종 멤버 함수들이 정보를 담고 있는데 이 정보는 특정한 '하나의' 윈도우에 대한 그래픽 정보이다. 예를 들자면 폰트, 선의 색상, 굵기, 채움 무늬, 그리기 모드, 시작 위치 등이다.

여기서 중요한 점은 '하나의' 윈도우에 대한 것이라는 점이다. Windows API 함수를 이용해 프로그램을 작성하다 보면 항상 임의의 윈도우에 뭔가를 그리기 위해서는 'GetDC()' 함수를 이용해서 '해당 윈도우'의 Device Context를 작성해야 한다.

이 점을 잊어버리게 되면 Device Context를 변경하지 않거나 해제 하지 않고 다른 윈도우에 이전 윈도우의 DC를 사용하는 오류를 저지를 수 있지 않을까 하는 생각이 든다...

아무튼 Device Context는 한글로 해석하면 '장치 내용' 정도가 되겠는데 푸훗.. 우끼다... 이 Device라는 단어를 한국어로 해석하면 '장치'이지만 사실 그 의미는 컴퓨터에 삽입된 하드웨어 장치만 의미하는 것이 아니라 특정한 어떤것이 그 하나로써 독립적이면 전부 Device라고 하는 듯 하다.

즉, 윈도우 한개, 동영상 파일 한개, 그림 이미지 한개 등 그 하나로써 독립성을 완벽하게 가지는 것을 Device라고 한다면 Device Context의 의미가 좀더 쉽게 다가온다.

Device에 대한 각종 정보를 담고 있는 구조체가 바로 Device Context이고 Windows API에서 Device는 바로 '하나의 윈도우'를 의미한다.

이런 DC를 작성하는 것이 바로 GetDC(HWND hWnd) 함수이다. 이 함수는 입력으로 들어오는 HWND hWnd 윈도우에 적당한 DC를 만들어서 (각종 그리기 정보들) 그 값을 리턴하여 준다.

즉, hdc = GetDC(hWnd); 하게 되면 hWnd 윈도우에 알맞는 DC를 만들어서 hdc에 대입하고 이 hdc를 이용해서 그 윈도우에다가 마구 마구 그리면 된다. 참 쉽죠잉~

GetDC() 함수 대신 BeginPaint() 함수도 있는데 이 함수의 특징은 '오직' WM_PAINT 루틴에서만 사용가능하다는 점이다. 흠. 흥미롭죠~

주의할 건 GetDC로 특정 윈도우의 DC를 얻어왔다면 반드시 ReleaseDC로 해제해주는 것을 잊지 말자는 것.




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

윈도우 - 차일드, 팝업  (0) 2009.11.17
윈도우 - SetClassLongPtr(), SetWindowLongPtr()  (0) 2009.11.17
윈도우 - WNDCLASS 구조체  (0) 2009.11.17
윈도우 - CreateWindow()  (0) 2009.11.17
메모리, Win32 vs. Win16  (2) 2009.05.22
posted by 대갈장군