다음을 통해 공유


프로세스에 대한 기본 DPI 인식 설정

Windows의 데스크톱 애플리케이션은 다른 DPI 인식 모드에서 실행할 수 있습니다. 이러한 모드는 서로 다른 DPI 크기 조정 동작을 사용하도록 설정하고 서로 다른 좌표 공간을 사용할 수 있습니다. DPI 인식에 대한 자세한 내용은 Windows에서 높은 DPI 데스크톱 애플리케이션 개발을 참조하세요. 예기치 않은 동작을 방지하기 위해 프로세스의 기본 DPI 인식 모드를 명시적으로 설정하는 것이 중요합니다.

프로세스의 기본 DPI 인식을 지정하는 두 가지 주요 방법이 있습니다.

1) 애플리케이션 매니페스트 설정을 통해

2) API 호출을 통해 프로그래밍 방식으로

매니페스트 설정을 통해 기본 프로세스 DPI 인식을 지정하는 것이 좋습니다. API를 통해 기본값을 지정하는 것은 지원되지만 권장되지 않습니다.

애플리케이션 매니페스트를 사용하여 기본 인식 설정

프로세스 기본 DPI 인식 모드를 지정할 수 있는 두 가지 매니페스트 설정인 <dpiAwareness> 및 <dpiAware>가 있습니다. <dpiAware>는 Windows Vista에서 도입되었으며 프로세스 기본값만 시스템 인식으로 설정할 수 있습니다. <dpiAwareness>는 Windows 10 버전 1607에서 도입되었으며 프로세스 기본 DPI 인식 모드의 순서가 지정된 목록을 지정할 수 있습니다. 이렇게 하면 지정된 첫 번째 인식 모드를 지원할 수 없는 Windows 버전에서 애플리케이션이 실행되는 경우 사용되는 백업 DPI 인식 모드를 설정할 수 있습니다. 이전 버전의 Windows에서는 최신 <dpiAwareness> 태그가 무시됩니다. 즉, 이러한 매니페스트 설정을 모두 사용하여 이전 버전의 Windows에서는 프로세스 기본값이 시스템 인식이 되고 Windows 10, 버전 1607 이상 버전에서는 모니터별 인식이 되는 시나리오를 활성화할 수 있습니다. Windows 10, 버전 1607 및 <dpiAware> 설정은 <dpiAwareness> 요소가 있는 경우 무시됩니다.

아래 표에서는 두 매니페스트 설정을 사용하여 다른 프로세스 기본 DPI 인식 모드를 지정하는 방법을 보여 줍니다.

프로세스 기본 DPI 인식 모드 <dpiAware> 설정 <dpiAwareness> 설정
(Windows 10 버전 1607 이상​)
알지 못하는 해당 없음(매니페스트에 dpiAware 설정 없음)
또는
<dpiAware>false</dpiAware>
<dpiAwareness>unaware</dpiAwareness>
시스템 인식 <dpiAware>true</dpiAware> <dpiAwareness>system</dpiAwareness>
모니터별 <dpiAware>true/pm<dpiAware> <dpiAwareness>PerMonitor</dpiAwareness>
모니터별 V2 지원되지 않음 <dpiAwareness>PerMonitorV2</dpiAwareness>

 

아래 샘플에서는 동일한 매니페스트 파일 내에서 사용되는 <dpiAwareness>과 <dpiAware> 설정을 모두 보여줍니다. 이 설정은 여러 버전의 Windows에 대해 프로세스 기본 DPI 인식 동작을 구성합니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <asmv3:application>
    <asmv3:windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

프로그래밍 방식으로 기본 인식 설정

권장되지는 않지만 프로그래밍 방식으로 기본 DPI 인식을 설정할 수 있습니다. 프로세스에서 창(HWND)이 만들어지고 나면 DPI 인식 모드 변경이 더 이상 지원되지 않습니다. 프로세스 기본 DPI 인식 모드를 프로그래밍 방식으로 설정하는 경우에는 HWND가 생성되기 전에 해당 API를 호출해야 합니다.

프로세스에 대한 기본 DPI 인식을 지정할 수 있는 여러 API가 있습니다. 현재 권장되는 API는 이전 API가 더 적은 기능을 제공하므로 SetProcessDpiAwarenessContext입니다.

API Windows 최소 버전 DPI 알지 못하는 시스템 DPI 인식 모니터별 DPI 인식
SetProcessDPIAware Windows Vista 해당 없음 SetProcessDPIAware() 해당 없음
SetProcessDpiAwareness Windows 8.1 SetProcessDpiAwareness(PROCESS_DPI_UNAWARE) SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE)
SetProcessDpiAwarenessContext Windows 10 버전 1607 SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_UNAWARE) SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE)

SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE)

SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)

프로세스 기본값과 스레드 기본값 비교

이 문서에서는 프로세스에 대한 기본 DPI 인식 설정을 참조합니다. 이는 Windows 10에서 단일 프로세스 내에서 둘 이상의 DPI 인식 모드를 실행하기 위한 지원을 도입했기 때문입니다(Windows 10 이전에는 전체 프로세스가 단일 DPI 인식 모드를 준수해야 함). 프로세스 내에서 둘 이상의 DPI 인식 모드 실행에 대한 지원을 "혼합 모드 DPI 크기 조정"이라고 합니다. 프로세스 내에서 혼합 모드 DPI 크기 조정을 사용하는 경우 각 최상위 창은 프로세스 기본값과 다를 수 있는 DPI 인식 모드에서 실행할 수 있습니다. 명시적으로 지정하지 않는 한 각 스레드는 만들 때 기본적으로 프로세스 기본값으로 설정됩니다. 혼합 모드 DPI 크기 조정에 대한 자세한 내용은 혼합 모드 DPI 크기 조정 및 DPI 인식 API 문서를 참조하세요.