다음을 통해 공유


PROCESS_DPI_AWARENESS 열거형(shellscalingapi.h)

dpi(인치당 점) 인식 값을 식별합니다. DPI 인식은 애플리케이션이 DPI에 대해 수행하는 크기 조정 작업의 양과 시스템에서 수행하는 작업을 나타냅니다.

사용자는 디스플레이에서 DPI 배율 인수를 서로 독립적으로 설정할 수 있습니다. 일부 레거시 애플리케이션은 여러 DPI 설정에 대한 크기 조정을 조정할 수 없습니다. 사용자가 디스플레이에 너무 크거나 작은 콘텐츠가 표시되지 않고 이러한 애플리케이션을 사용하기 위해 Windows는 애플리케이션에 DPI 가상화를 적용하여 시스템이 현재 디스플레이의 DPI와 일치하도록 자동으로 크기를 조정할 수 있습니다. PROCESS_DPI_AWARENESS 값은 애플리케이션이 자체적으로 처리하는 크기 조정 수준과 Windows에서 제공하는 크기를 나타냅니다. 시스템에 의해 확장된 애플리케이션이 흐리게 표시될 수 있으며 호환성을 유지하기 위해 모니터에 대한 가상화된 데이터를 읽습니다.

Syntax

typedef enum PROCESS_DPI_AWARENESS {
  PROCESS_DPI_UNAWARE = 0,
  PROCESS_SYSTEM_DPI_AWARE = 1,
  PROCESS_PER_MONITOR_DPI_AWARE = 2
} ;

상수

 
PROCESS_DPI_UNAWARE
값: 0
DPI를 인식하지 못합니다. 이 앱은 DPI 변경에 맞게 크기를 조정하지 않으며 항상 100%(96DPI)의 배율 인수를 갖는 것으로 간주됩니다. 다른 DPI 설정에서 시스템에 의해 자동으로 크기가 조정됩니다.
PROCESS_SYSTEM_DPI_AWARE
값: 1
시스템 DPI 인식. 이 앱은 DPI 변경에 맞게 크기가 조정되지 않습니다. DPI를 한 번 쿼리하고 앱의 수명 동안 해당 값을 사용합니다. DPI가 변경되면 앱이 새 DPI 값으로 조정되지 않습니다. DPI가 시스템 값에서 변경되면 시스템에 의해 자동으로 확장 또는 축소됩니다.
PROCESS_PER_MONITOR_DPI_AWARE
값: 2
모니터별 DPI 인식. 이 앱은 DPI를 만들 때 DPI를 확인하고 DPI가 변경 될 때마다 배율 인수를 조정합니다. 이러한 애플리케이션은 시스템에 의해 자동으로 확장되지 않습니다.

설명

중요  

이전 버전의 Windows에서는 전체 애플리케이션에 대한 DPI 인식을 설정해야 했습니다. 이제 DPI 인식은 개별 스레드, 프로세스 또는 창에 연결됩니다. 즉, 앱이 실행되는 동안 DPI 인식이 변경되고 여러 창에 고유한 독립적인 DPI 인식 값이 있을 수 있습니다. DPI 인식이 현재 작동하는 방식에 대한 자세한 내용은 DPI_AWARENESS 참조하세요. 애플리케이션 매니페스트에서 DPI 인식을 설정하는 방법에 대한 아래 권장 사항은 계속 지원되지만 현재 권장 사항은 DPI_AWARENESS_CONTEXT 사용하는 것입니다.

 
애플리케이션에 대한 DPI 인식은 애플리케이션 매니페스트를 통해 설정되어야 시스템의 DPI에 따라 동작이 수행되기 전에 결정됩니다. 또는 SetProcessDpiAwareness를 사용하여 DPI 인식을 설정할 수 있지만, 이렇게 하는 경우 시스템 DPI에 종속된 작업을 수행하기 전에 이를 설정해야 합니다. 프로세스에 대한 DPI 인식을 설정하면 변경할 수 없습니다.
  

앱이 PROCESS_DPI_UNAWARE 경우 애플리케이션 매니페스트에 값을 설정할 필요가 없습니다. PROCESS_DPI_UNAWARE 다른 값을 지정하지 않는 한 앱의 기본값입니다.

 
PROCESS_DPI_UNAWAREPROCESS_SYSTEM_DPI_AWARE 앱은 WM_DPICHANGED 응답할 필요가 없으며 DPI의 변경 내용을 처리할 필요가 없습니다. 시스템은 DPI가 변경될 때 필요에 따라 이러한 유형의 앱을 자동으로 확장하거나 축소합니다. PROCESS_PER_MONITOR_DPI_AWARE 앱은 DPI의 변경 내용을 인식하고 대응해야 하며 WM_DPICHANGED 신호를 받습니다. 시스템에 의해 크기가 조정되지 않습니다. 이 유형의 앱이 창과 콘텐츠의 크기를 조정하지 않으면 창이 다른 DPI 설정을 사용하여 하나의 디스플레이에서 다른 디스플레이로 이동함에 따라 상대적 DPI 변경에 따라 증가하거나 축소되는 것처럼 보입니다.
  

이전 버전의 Windows에서는 PROCESS_PER_MONITOR_DPI_AWARE 대한 설정이 없었습니다. 앱은 DPI를 인식하지 못하거나 DPI를 인식했습니다. Windows 8.1 전에 DPI 인식으로 분류된 레거시 애플리케이션은 현재 버전의 Windows에서 PROCESS_SYSTEM_DPI_AWARE PROCESS_DPI_AWARENESS 설정을 갖는 것으로 간주됩니다.

 
다양한 DPI 인식 값의 중요성과 영향을 이해하려면 세 개의 디스플레이가 있는 사용자를 고려합니다. A, B 및 C. 디스플레이 A는 100% 배율 인수(96DPI)로 설정되고, 디스플레이 B는 200% 배율 인수(192DPI)로 설정되고, 디스플레이 C는 300% 배율 인수(288 DPI)로 설정됩니다. 시스템 DPI는 200%로 설정됩니다.

PROCESS_DPI_UNAWARE 애플리케이션은 항상 100%(96DPI)의 배율 인수를 사용합니다. 이 시나리오에서는 크기가 500-500인 PROCESS_DPI_UNAWARE 창이 만들어집니다. 디스플레이 A에서 기본적으로 크기 조정 없이 렌더링됩니다. 디스플레이 B와 C에서는 각각 2와 3의 요소로 시스템에 의해 자동으로 스케일 업됩니다. 이는 PROCESS_DPI_UNAWARE 항상 96의 DPI를 가정하고 시스템이 이를 고려하기 때문입니다. 앱이 창 크기를 쿼리하는 경우 표시되는 내용에 관계없이 항상 500 by 500 값을 가져옵니다. 이 앱이 3개의 모니터 중 한 가지 DPI를 요청하면 96을 받게 됩니다.

이제 PROCESS_SYSTEM_DPI_AWARE 애플리케이션을 고려합니다. 샘플에서 시스템 DPI는 200% 또는 192 DPI입니다. 즉, 이 앱에서 만든 모든 창은 기본적으로 디스플레이 B에 렌더링됩니다. 창이 A를 표시하도록 이동하면 자동으로 2단계로 축소됩니다. 이 시나리오의 PROCESS_SYSTEM_DPI_AWARE 앱은 DPI가 항상 192라고 가정하기 때문입니다. 시작 시 DPI를 쿼리한 다음 변경하지 않습니다. 시스템은 A를 표시하도록 이동할 때 자동으로 축소하여 이를 수용합니다. 마찬가지로 창이 C를 표시하도록 이동하면 시스템은 자동으로 1.5의 배율로 스케일 업됩니다. 앱이 창 크기를 쿼리하는 경우 항상 PROCESS_DPI_UNAWARE 동일한 값을 가져옵니다. 3개의 모니터 중에서 DPI를 요청하는 경우 192를 받게 됩니다.

다른 인식 값과 달리 PROCESS_PER_MONITOR_DPI_AWARE 있는 디스플레이에 맞게 조정해야 합니다. 즉, 항상 기본적으로 렌더링되며 시스템에 의해 크기가 조정되지 않습니다. 앱은 WM_DPICHANGED 메시지를 받을 때 배율 인수를 조정해야 합니다. 이 메시지의 일부에는 창에 대해 제안된 사각형이 포함됩니다. 이 제안은 이전 DPI 값에서 새 DPI 값으로 크기가 조정된 현재 창입니다. 예를 들어 표시 A에서 500 by 500이고 표시 B로 이동된 창은 1000 by 1000인 제안된 창 사각형을 받게 됩니다. 동일한 창이 C를 표시하도록 이동되면 WM_DPICHANGED 연결된 제안된 창 사각형은 1500-1500이 됩니다. 또한 이 앱은 창 크기를 쿼리할 때 항상 실제 네이티브 값을 가져옵니다. 마찬가지로 3개의 모니터 중 DPI를 요청하는 경우 각각 96, 192 및 288을 받게 됩니다.

DPI 가상화로 인해 한 애플리케이션이 DPI 종속 정보에 대해 다른 인식 수준으로 다른 애플리케이션을 쿼리하는 경우 시스템은 호출자의 인식 수준에 맞게 값을 자동으로 크기 조정합니다. 한 가지 예는 GetWindowRect 를 호출하고 다른 애플리케이션에서 만든 창을 전달하는 경우입니다. 위에서 설명한 상황을 사용하여 PROCESS_DPI_UNAWARE 앱이 디스플레이 C에 500 by 500 창을 만들었다고 가정합니다. 다른 애플리케이션에서 창 사각형을 쿼리하는 경우 사각형의 크기는 앱의 DPI 인식에 따라 달라집니다.

PROCESS_DPI_UNAWARE 시스템에서 96의 DPI를 가정하고 실제 사각형을 3단계로 자동으로 축소하므로 500 by 500 사각형이 표시됩니다.
PROCESS_SYSTEM_DPI_AWARE 시스템에서 192의 DPI를 가정하고 실제 사각형을 3/2의 배율로 자동으로 스케일 다운하므로 1000 by 1000 사각형이 표시됩니다.
PROCESS_PER_MONITOR_DPI_AWARE 시스템에서 디스플레이의 실제 DPI를 사용하고 백그라운드에서 스케일링을 수행하지 않으므로 1500 by 1500 사각형이 표시됩니다.
 

예제

이 코드 조각은 애플리케이션 매니페스트에서 PROCESS_SYSTEM_DPI_AWARE 값을 설정하는 방법을 보여 줍니다.

<dpiAware>true</dpiAware>

이 코드 조각은 애플리케이션 매니페스트에서 PROCESS_PER_MONITOR_DPI_AWARE 값을 설정하는 방법을 보여 줍니다.

<dpiAware>true/PM</dpiAware>

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8.1 [데스크톱 앱만 해당]
지원되는 최소 서버 R2 Windows Server 2012 [데스크톱 앱만 해당]
머리글 shellscalingapi.h

추가 정보

DPI_AWARENESS