LuvSea

OnPaint()와 OnDraw() 본문

sTudy

OnPaint()와 OnDraw()

사랑海 2010. 3. 20. 11:01
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
WM_PAINT메세지를 처리하는 메세지 처리기는  OnPaint이다.
어떤 윈도우든 그 윈도우가 항상 싱싱한 모습으로 보이고자 한다면 OnPaint 함수를 재정의해서
거기에 현재 윈도우의 모습을 화면에 출력하는 루틴에 넣어 두어야 한다.

일반적으로 윈도우에서 화면 복원 루틴을  OnPaint 메세지 처리기에 넣어 두면 되는데,
CView Class의 파생 클래스에서 작업할 때 만큼은 특별히 OnPaint 함수를 쓰는 것보다, OnDraw함수를 사용하는것이 더 바람직하다.

OnDraw함수는 메세지를 처리하기위한 처리기가 아닌 가상(Virtual)함수
CView Class에서 CWnd Class 상속을 받은 후 OnPaint 함수를 재정의 하고, OnDraw라는  새로운 함수를 멤버 함수로 추가하고,
OnPaint 함수 안에서 OnDraw함수를 호출 하도록 하여 결국 CView Class 경우 WM_PAINT 메세지가 날아올때 마다
OnPiant와 OnDraw 함수가 모두 호출 되므로 화면을 그리는 기능에서는 어떤 함수를 쓰던 상관이 없다.

하지만 프린터 출력 기능을 사용하고자 한다면 OnPaint 함수보다 OnDraw함수를 이용하여야 하는데,
왜냐하면 OnDraw함수는 OnPaint 함수에서도 호출되지만 프린트 사용시 호출되는 OnPrint함수에서도 호출되기 때문이다.
OnDraw 함수 안의 루틴은 평소에는 화면을 복원하는데 사용되고, 인쇄 명령시에는 똑같은 내용이 그대로 프린터로 출력되도록 할 수 있다.
Comments