API

WM_PAINT 메시지의 특별한 동작

디버그정 2008. 8. 31. 09:44

WM_PAINT 메시지의 특별한 동작


WM_PAINT 메시지가 메시지 큐에 있을 때, GetMessage()는 메시지를 제거하지 않는다.

WM_PAINT 메시지를 제거하는 곳은 BeginPaint() 호출에서다.

그러므로 WM_PAINT 메시지를 처리하는 곳에서는 반드시 BeginPaint()를 호출해야 한다.

그렇지 않으면 윈도우 프로시저는 제거되지 않는 WM_PAINT메시지를 계속 받게 된다.

또한 WM_PAINT 메시지가 아닌 곳에서 DC를 얻기 위해 BeginPaint()를 사용하는 것은 메시지 큐에서 WM_PAINT를 지울 수 없으므로 타당한 DC를 얻지 못하게 된다.

- 반드시 기억하여 두자.

  WM_PAINT 메시지에서는 BeginPaint()로 DC를 얻고, 다른 메시지에서는 GetDC()를 사용해야 한다.

  이것은 MFC에서 BeginPaint()를 사용하는 DC와 GetDC()를 사용하는 DC 클래스가 다르게 구현되어야 하는 이유다.