창 배경
창 배경은 창 그리기를 시작하기 전에 클라이언트 영역을 채우는 데 사용되는 색 또는 패턴입니다. 창 배경은 창이 이동되기 전에 화면에 있는 모든 항목을 커버하여 기존 이미지를 지우고 애플리케이션의 새 출력이 관련 없는 정보와 혼합되지 않도록 합니다.
시스템은 창의 배경을 그리거나 애플리케이션이 BeginPaint를 호출할 때 WM_ERASEBKGND 메시지를 전송하여 창을 만들 수 있는 기회를 제공합니다. 애플리케이션이 메시지를 처리하지 않고 DefWindowProc에 전달하는 경우 시스템은 창의 클래스에서 지정한 배경 브러시의 패턴으로 채워 배경을 지웁니다. 브러시가 유효하지 않거나 클래스에 배경 브러시가 없는 경우 시스템은 BeginPaint가 반환하는 PAINTSTRUCT 구조체에서 fErase 멤버를 설정하지만 다른 작업은 수행하지 않습니다. 애플리케이션은 필요한 경우 창 배경을 그릴 수 있는 두 번째 기회가 있습니다.
WM_ERASEBKGND 처리하는 경우 애플리케이션은 메시지의 wParam 매개 변수를 사용하여 배경을 그려야 합니다. 이 매개 변수에는 창의 표시 디바이스 컨텍스트에 대한 핸들이 포함되어 있습니다. 배경을 그린 후 애플리케이션은 0이 아닌 값을 반환해야 합니다. 이렇게 하면 애플리케이션이 후속 WM_PAINT 메시지를 처리할 때 BeginPaint가 PAINTSTRUCT 구조체의 fErase 멤버를 0이 아닌 값(배경을 지워야 함을 나타낸)으로 잘못 설정하지 않습니다.
RegisterClass 함수를 사용하여 클래스를 등록할 때 애플리케이션은 WNDCLASS 구조체의 hbrBackground 멤버에 브러시 핸들 또는 시스템 색 값을 할당하여 클래스 배경 브러시를 정의할 수 있습니다. GetStockObject 또는 CreateSolidBrush 함수를 사용하여 브러시 핸들을 만들 수 있습니다. 시스템 색 값은 SetSysColors 함수에 대해 정의된 값 중 하나일 수 있습니다. (멤버에 할당되기 전에 값을 1씩 늘려야 합니다.)
애플리케이션은 클래스 배경 브러시가 정의되어 있더라도 WM_ERASEBKGND 메시지를 처리할 수 있습니다. 이는 사용자가 클래스의 다른 창에 영향을 주지 않고 지정된 창의 창 배경색 또는 패턴을 변경할 수 있도록 하는 애플리케이션에서 일반적입니다. 이러한 경우 애플리케이션은 메시지를 DefWindowProc에 전달해서는 안 됩니다.
시스템에서 창 원점을 참조 지점으로 사용하여 브러시를 그리기 때문에 애플리케이션에서 브러시를 정렬할 필요가 없습니다. 이 경우 사용자는 패턴 브러시의 맞춤에 영향을 주지 않고 창을 이동할 수 있습니다.