c# 윈도우즈 폼즈 per monitor v2로 dpi 설정하기

큰 모니터에 높은 해상도로 설정을 하면 아이콘 같은 인터패이스 엘리먼트들이 작아서 보기 힘들다. 윈도우즈의 디스플래이 배율을 150% 200% 등으로 높이면 이들을 크게 출력한다.

디스플래이 배율 설정은 애플리캐이션 개발을 까다롭게 한다. 하나의 애플리캐이션이 서로 다른 배율의 모니터에서 하나는 뚜렷하게 다른 하나는 뚜렷하지 않게 보이는 경우가 흔하기 때문이다. 증권 회사들의 트래이딩 애플리캐이션이 대표적인 예다. 큰 모니터에서는 뚜렷하지 않게 보이고 작은 모니터에서는 뚜렷하게 보인다. 이 문제는 아래의 방법으로 일부 해결할 수 있다.

디스플래이 배율을 바꾼 환경에서 비주얼 스투디오로 윈도우즈 폼즈 프로젝트를 만들면 디자이너에 아래와 같은 메시지가 뜬다.

scaling on your main display is set to 150%. consider opening the winforms designer in dpi unaware more.

dpi를 무시하는 환경으로 바꿔 작업을 하라고 권하는 내용이다. 즉 현재는 그렇지 않은 aware 설정이라는 뜻이다.

aware인 상태에서 만든 애플리캐이션은 150% 디스플래이에서는 뚜렷하게 보이고 100% 디스플래이에서는 뚜렷하지 않게 보인다. unaware로 하면 반대다. 오래 전 환경에서는 둘 가운데에서 하나를 골라야 하지만 최신 환경에서는 per monitor v2 설정으로 둘 모두에서 뚜렷하게 구현할 수 있다.

solution explorer > add > new item > application manifest file

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>

증권 회사 애플리캐이션은 오래 전 환경에서 쓰는 경우도 있을 테니 굳이 위 설정을 하지 않는다. 그래서 일부 해결한다고 한 거다.

위의 설정을 해도 위의 메시지는 계속 뜬다. 이 메시지는 이제 무시해도 되므로 아래의 방법으로 없앤다.

tools > options > windows forms designer > general > high dpi support > dpi scaling notifications > uncheck

이 설정은 wpf와 winui에서는 문제되지 않는다.