비클라이언트 영역

시스템은 제목 표시줄, 메뉴 모음 또는 창 프레임과 같은 비클라이언트 영역의 일부를 업데이트해야 할 때마다 창에 WM_NCPAINT 메시지를 보냅니다. 시스템은 다른 메시지를 보내 창이 클라이언트 영역의 일부를 업데이트하도록 지시할 수도 있습니다. 예를 들어 창이 활성화되거나 비활성 상태가 되면 WM_NCACTIVATE 메시지를 보내 제목 표시줄을 업데이트합니다. 일반적으로 표준 창에 대해 이러한 메시지를 처리하는 것은 권장되지 않습니다. 애플리케이션은 창에 대한 비클라이언트 영역의 모든 필수 부분을 그릴 수 있어야 하기 때문입니다. 이러한 이유로 대부분의 애플리케이션은 기본 처리를 위해 이러한 메시지를 DefWindowProc 에 전달합니다.

창에 대한 사용자 지정 비클라이언트 영역을 만드는 애플리케이션은 이러한 메시지를 처리해야 합니다. 이렇게 할 때 애플리케이션은 창 디바이스 컨텍스트를 사용하여 창에서 그리기를 수행해야 합니다. 창 디바이스 컨텍스트를 사용하면 애플리케이션이 비클라이언트 영역을 포함하여 창의 모든 부분에 그릴 수 있습니다. 애플리케이션은 GetWindowDC 또는 GetDCEx 함수를 사용하여 창 디바이스 컨텍스트를 검색하고 그리기가 완료되면 ReleaseDC 함수를 사용하여 창 디바이스 컨텍스트를 해제해야 합니다.

시스템은 비클라이언트 영역에 대한 업데이트 영역을 유지 관리합니다. 애플리케이션이 WM_NCPAINT 메시지를 받으면 wParam 매개 변수는 업데이트 영역의 차원을 정의하는 지역에 대한 핸들을 포함합니다. 애플리케이션은 핸들을 사용하여 업데이트 영역을 창 디바이스 컨텍스트의 클리핑 영역과 결합할 수 있습니다. 애플리케이션이 GetDCEx 를 사용하고 지역 핸들과 DCX_INTERSECTRGN 플래그를 모두 지정하지 않는 한 시스템은 창 디바이스 컨텍스트를 검색할 때 업데이트 지역을 자동으로 결합하지 않습니다. 애플리케이션이 업데이트 영역을 결합하지 않으면 창 외부로 확장되는 그리기 작업만 잘립니다. 애플리케이션은 지역을 사용하는지 여부에 관계없이 업데이트 지역을 지울 책임이 없습니다.

애플리케이션이 WM_NCACTIVATE 메시지를 처리하는 경우 처리 후 TRUE 를 반환하여 시스템이 활성 창의 변경을 완료하도록 지시해야 합니다. 애플리케이션이 WM_NCACTIVATE 메시지를 받을 때 창이 최소화되면 해당 메시지를 DefWindowProc에 전달해야 합니다. 이러한 경우 기본 함수는 아이콘에 대한 레이블을 다시 그어 줍니다.