본문 바로가기

Study Memos/Windows Programming

CreateCompatibleDC (Section 27)

참고> blog.naver.com/tipsware/220995733415

 

1. Memory DC: DC의 특성을 대부분 가지고는 있지만 출력 장치와는 연결이 안 된 DC
-> CreateCompatibleDC() 함수로 생성

2. CreateCompatibleDC 함수: 이름 그대로 어떤 DC와 호환되는(Compatible) DC를 만드는 함수

3. Memory DC를 사용하는 이유
-> 화면 출력용 DC는 GDI 함수를 사용할 때마다 바로 화면에 출력되기 때문에 복잡한 그림을 그리기 위해 많은 GDI 함수를 사용하면 "화면이 깜빡이는 현상"이 발생
-> Memory DC를 생성하고 복잡한 그림을 비트맵 객체에 그리게 되면 Memory DC로 그린 그림이 화면에 출력되지 않기 때문에 "화면이 깜빡이는 현상"이 발생하지 않음
-> Memory DC가 가진 비트맵에 그림이 다 그려지면 BitBlt 함수에 'Memory DC'와 '화면 출력용 DC'를 사용하여 비트맵에 그려진 그림을 복사하여 화면에 출력할 수 있음
-> 이를 예전에는 '더블 버퍼링(Double Buffering, 두 개의 이미지 버퍼를 사용하여 깜빡임을 줄이는 방식)' 이라고 불렀음
-> 그림이 복잡하거나 빠르게 화면을 반복적으로 갱신하는 경우에 발생하는 깜빡임을 해결하기 위해서 더블 버퍼링 방식을 많이 사용함

4. CreateCompatibleDC 함수는 호환하고 싶은 DC를 매개변수로 받음
-> '매개 변수로 전달된 DC와 호환된다' 는 뜻은 DC가 사용하는 '출력 장치의 종류'나 '출력 장치가 사용중인 그래픽 드라이버 정보'를 가지고 새로운 DC를 만든다는 뜻
-> GetDC 함수로 얻은 DC는 ReleaseDC로 해제하지만 CreateCompatibleDC 함수로 생성한 DC는 DeleteDC 함수로 제거해야 함

5. CreateCompatibleDC를 사용해서 얻은 DC는 출력 대상이 없는 상태로 그리기 특성만 정해져서 만들어지기 때문에 default로 연결된 비트맵 객체는 제대로 된 녀석이 아님
-> 원본 DC의 비트맵 객체와 Memory DC 를 연결해주는 작업을 해야 함.
-> CreateCompatibleBitmap 함수로 원본 DC의 비트맵 객체를 얻어온 후, SelectObject 함수로 Memory DC와 비트맵 객체를 연결해주어야 함.
-> 즉, 반드시 비트맵을 연결하고 Memory DC를 사용해야 함.

'Study Memos > Windows Programming' 카테고리의 다른 글

ValidateRect 함수 (Section 29)  (0) 2020.09.18
윈도우 좌표 구성 (Section 28)  (0) 2020.09.18
BitBlt (Section 26)  (0) 2020.09.16
WM_CREATE (Section 25)  (0) 2020.09.16
WM_PAINT(Section 24)  (0) 2020.09.15