동기 및 비동기 그리기
WM_PAINT 메시지를 처리하는 동안 수행되는 대부분의 그리기는 비동기입니다. 즉, 창의 일부가 무효화되는 시간과 WM_PAINT 전송되는 시간 사이에 지연이 있습니다. 지연 중에 애플리케이션은 일반적으로 큐에서 메시지를 검색하고 다른 작업을 수행합니다. 지연의 이유는 시스템이 일반적으로 창에서 그리기를 우선 순위가 낮은 작업으로 처리하고 창의 위치 또는 크기에 영향을 줄 수 있는 사용자 입력 메시지 및 메시지가 WM_PAINT 전에 처리되는 것처럼 작동하기 때문입니다.
경우에 따라 애플리케이션이 동기적으로 그릴 필요가 있습니다. 즉, 창의 일부를 무효화한 직후 창에 그립니다. 일반적인 애플리케이션은 창을 만든 직후 주 창을 그려 애플리케이션이 성공적으로 시작되었음을 사용자에게 알립니다. 이러한 창은 사용자 입력에 대한 포커스 역할을 하므로 시스템은 단추와 같은 일부 컨트롤 창을 동기적으로 그립니다. 간단한 그리기 루틴이 있는 창은 동기적으로 그릴 수 있지만 이러한 모든 그리기는 신속하게 수행되어야 하며 사용자 입력에 응답하는 애플리케이션의 기능을 방해해서는 안 됩니다.
UpdateWindow 및 RedrawWindow 함수는 동기 그리기를 허용합니다. UpdateWindow 업데이트 영역이 비어 있지 않으면 창에 직접 WM_PAINT 메시지를 보냅니다. RedrawWindowWM_PAINT 메시지를 보내지만 애플리케이션은 비클라이언트 영역 및 창 배경을 그릴지 여부 또는 업데이트 영역이 비어 있는지 여부에 관계없이 메시지를 보낼지 여부와 같이 창을 그리는 방법을 더 많이 제어할 수 있습니다. 이러한 함수는 애플리케이션 메시지 큐의 다른 메시지 수에 관계없이 WM_PAINT 메시지를 창으로 직접 보냅니다.
시간이 많이 걸리는 그리기 작업이 필요한 모든 창은 창을 그릴 때 보류 중인 메시지가 차단되지 않도록 비동기적으로 그려야 합니다. 또한 창의 작은 부분을 무효화하는 애플리케이션은 이러한 잘못된 부분이 일련의 동기 WM_PAINT 메시지 대신 단일 비동기 WM_PAINT 메시지로 통합되도록 허용해야 합니다.