[Win32 API] 화면 그리기
2008. 2. 6. 20:40
윈도에서 화면에 무엇인가 그리거나 출력하기 위해서는 먼저 DC (Device Context)를
얻어와야 한다. DC를 간단히 설명하면 화면에 출력을 하기 위한 모든 정보를 담고있는
구조체.. 정도로 요약된다.

자료형 HDC 로 표현되며 이 HDC를 구하는 방법은 GetDC()류의 함수를 사용하거나
BeginPaint()를 사용하는 방법이 있는데 두 함수의 차이점은 무효화영역에 있다.

무효화 영역이란 어떠한 이유에서건 윈도가 다시 그려져야 할 영역을 말하는데

- 처음 생성될 때
- 위치가 이동되었을 때
- 크기가 변경되었을 때
- 다른 윈도에게 가려져 있다가 드러났을 때
- 스크롤 될 때
( 이상 Windows API 정복 에서..)

등이 있으며 Invalidate..()류의 함수를 호출함으로써 설정된다.
Invalidate..()류의 함수가 호출되면 무효화 영역이 설정되고 WM_PAINT 메세지가 보내지는데
WM_PAINT 메세지 처리 루틴에서는 GetDC()류의 함수가 아닌 BeginPaint() 함수를 사용하여
무효화 영역에 대한 처리와 HDC를 얻어오게 된다.

% WM_PAINT 메세지의 특징으로 무효화 영역의 설정 - Invalidate..()류의 함수 호출 -
이 없으면 사용자가 임의로 SendMessage( WM_PAINT )를 보내도 호출되지 않는다.

GetDC()류의 함수는 무효화 영역 설정 없이 HDC를 얻어올 수 있다.
그러므로 WM_PAINT의 처리 루틴이 아닌 곳에서 그때 그때 필요한 순간에 무효화 영역 없이
무엇인가 그리고자 할 때는 GetDC() 함수를 사용하면 된다.
써드아이
써드아이