티스토리 뷰

C,C++

Device Context의 개념(GetDC / ReleaseDC)

Andrew Shin 2015. 5. 9. 11:38

기본적으로 Windows는 세가지 동적 연결 라이브러리로 구성된다.

메모리와 프로그램을 관리하는 Kener
유저인터페이스와 윈도우를 관리하는 User
화면처리와 그래픽을 담당하는 GDI

GDI는 풀어서쓰면 Graphic Device Interface 이다. (그래픽 장치 접근 혹은 접속 함수)

GDI를 통해서 우리는 화면에 글을 쓰거나 그림을 넣을 수 있다.
그러므로 GDI와 DeviceContext(DC)는 관계가 되어 있다는것을 알 수 있다.

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

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

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

Device Context는 한글로 해석하면 '장치내용'정도 인데 이 '장치'의 의미는 컴퓨터에 삽입된 하드웨어 장치만 의미하는 것이 아니라 특정한 어떤 것이 그 하나로써 독립적이며 전부 Device라고 한다.

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

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

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

그러므로 HDC hdc = GetDC(hwnd); 하게 되면 hwnd 윈도우에 알맞는 DC를 만들어서 hdc에 대입하고 이 hdc를 이용하여 해당 윈도우에 그리기를 하면 되겠다.

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

중요한것은 GetDC로 특정 윈도우의 DC를 얻어왔다면 반드시 ReleaseDC로 해제해주어야 한다는 것이다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 31
글 보관함