WM_PAINT 메시지 없이 그리기

애플리케이션은 WM_PAINT 메시지를 처리하는 동안 대부분의 그리기 작업을 수행하지만 WM_PAINT 메시지에 의존하지 않고 애플리케이션이 창에 직접 그리는 것이 더 효율적일 수 있습니다. 이는 텍스트를 선택하고 개체를 끌거나 크기를 조정하는 경우와 같이 사용자에게 즉각적인 피드백이 필요한 경우에 유용할 수 있습니다. 이러한 경우 애플리케이션은 일반적으로 키보드 또는 마우스 메시지를 처리하는 동안 그립니다.

WM_PAINT 메시지를 사용하지 않고 창을 그리기 위해 애플리케이션은 GetDC 또는 GetDCEx 함수를 사용하여 창 에 대한 디스플레이 디바이스 컨텍스트를 검색합니다. 디스플레이 디바이스 컨텍스트를 사용하면 애플리케이션이 창에 그려지고 다른 창에 침입하지 않도록 방지할 수 있습니다. 애플리케이션이 그리기를 완료하면 ReleaseDC 함수를 호출하여 다른 애플리케이션에서 사용할 디스플레이 디바이스 컨텍스트를 해제합니다.

WM_PAINT 메시지를 사용하지 않고 그리는 경우 애플리케이션은 일반적으로 창을 무효화하지 않습니다. 대신 창을 쉽게 복원하고 드로잉을 제거할 수 있는 방식으로 그립니다. 예를 들어 사용자가 텍스트 또는 개체를 선택할 때 애플리케이션은 일반적으로 창에 이미 있는 항목을 반전하여 선택 영역을 그립니다. 애플리케이션은 단순히 다시 반전하여 선택 영역을 제거하고 창의 원래 내용을 복원할 수 있습니다.

애플리케이션은 창에 대한 변경 내용을 신중하게 관리할 책임이 있습니다. 특히 애플리케이션이 선택 영역을 그리고 중간 WM_PAINT 메시지가 발생하는 경우 애플리케이션은 메시지 중에 수행된 모든 그리기에서 선택 영역이 손상되지 않도록 해야 합니다. 이를 방지하기 위해 많은 애플리케이션에서 선택 영역을 제거하고 일반적인 그리기 작업을 수행한 다음 그리기 완료 시 선택 영역을 복원합니다.