Visual Studio의 Windows Forms 디자이너에서 HDPI/크기 조정 문제 해결
이 문서에서는 Visual Studio를 DPI 비인식 프로세스로 실행하여 HDPI 모니터에서 Windows Forms 디자이너 크기 조정 제한 사항 문제를 해결하는 방법을 알아봅니다. HDPI는 인치당 높은 도트 수를 의미하며 각 도트는 물리적 디바이스 픽셀을 나타냅니다.
픽셀 밀도가 높을수록 이미지가 더 선명해지고 크기 조정 요소가 제대로 표시됩니다. 적절한 크기 조정이 없으면 UI(사용자 인터페이스) 요소와 텍스트가 너무 작아 효과적으로 사용할 수 없으며 겹칠 수 있습니다. 이 문제를 해결하기 위해 Windows는 DPI 설정과 일치하도록 UI 백분위수의 크기를 자동으로 조정합니다. 예를 들어 100%의 DPI 설정은 96DPI를 나타내고 125%는 120DPI입니다. Windows가 100% 비트맵 드로잉의 기준선으로 사용한 인치당 96픽셀을 제공하는 데 사용되는 모니터입니다. 그러나 디스플레이 기술이 발전함에 따라 모니터는 이제 300DPI 이상의 패널과 함께 제공됩니다.
애플리케이션이 자신을 DPI 인식으로 선언하는 경우 앱이 더 높은 DPI 설정에서 잘 동작하도록 지정하는 문이므로 Windows에서 자동 크기 조정을 적용할 수 있습니다. 반대로 DPI를 인식하지 않는 애플리케이션은 인치당 96픽셀 또는 100%의 고정 DPI 값으로 렌더링되므로 자동 크기 조정이 적용되지 않습니다.
DPI를 인식하지 않는 Windows Forms 디자이너
참고 항목
Visual Studio 2022 버전 17.8 이상에서는 이 문서에 설명된 문제를 방지할 수 있습니다. Visual Studio 2022 버전 17.8은 DPI 인식 애플리케이션 내에서 DPI를 인식하지 않는 탭을 지원합니다. Visual Studio DPI 개선을 참조하세요. 이렇게 하면 DPI를 인식하지 않는 모드에서 Visual Studio를 실행할 필요 없이 DPI를 인식하지 않는 컨텍스트용 Windows Forms를 디자인할 수 있습니다. Windows Forms 프로젝트에서 이 설정을 사용하려면 프로젝트 파일에서 ForceDesignerDPIUnaware
속성을 true
로 설정합니다.
<PropertyGroup>
...
<ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>
기본적으로 Visual Studio는 DPI 인식 애플리케이션으로, 이를 통해 디스플레이 배율이 자동으로 조정됩니다. 그러나 Windows Forms 디자이너는 DPI를 인식하지 않는 앱이므로 96DPI에서 비트맵으로 표시됩니다. 자동 크기 조정 지원이 없으면 다음 이미지와 같이 HDPI 모니터에서 양식을 열 때 문제 및 겹침이 발생합니다.
HDPI 모니터의 Windows Forms 디자이너에서 양식을 열면 Visual Studio에서 모니터의 현재 크기 조정 비율(예: 150%/144DPI), Windows Forms 디자이너와 일치하도록 100% 크기 조정에서 Visual Studio를 다시 시작하는 옵션 및 추가 정보를 표시하는 정보 표시줄이 표시됩니다. 100% 크기 조정에서 다시 시작하면 VS DPI를 인식하지 못하므로 겹치지 않고 적절한 렌더링이 가능합니다.
팁
- 정보 표시줄을 닫았고 Visual Studio를 DPI를 인식하지 않는 것으로 다시 시작하려면 DevEnv.exe 도구를 사용합니다.
- 디자이너에서 작업하지 않는 경우 정보 표시줄을 무시할 수 있습니다. 알림을 사용하지 않도록 설정하여 알림 표시줄이 계속 나타나지 않게 할 수도 있습니다.
Visual Studio를 DPI를 인식하지 않는 프로세스로 다시 시작
이러한 UI 문제를 해결하는 데 권장되는 솔루션은 Visual Studio를 DPI를 인식하지 않는 프로세스로 다시 시작하는 것입니다. 즉, 100% 크기 조정(96DPI)에서 다시 시작됩니다.
DPI를 인식하지 못하는 것으로 전환하려면 다음을 수행합니다.
- Windows Forms 디자이너에서 양식을 열 때 나타나는 노란색 정보 표시줄에서 "100% 크기 조정을 사용하여 Visual Studio 다시 시작" 옵션을 선택합니다.
Windows Forms 디자이너에서 작업이 완료되면 기본 설정으로 돌아가도록 Visual Studio를 DPI를 인식하는 프로세스로 다시 시작해야 합니다.
DPI 인식으로 돌아가려면 다음을 수행합니다.
- Visual Studio를 닫고 다시 열어 DPI 인식으로 다시 돌아갑니다. 또는 알림 표시줄에서 Visual Studio를 DPI 인식 프로세스로 다시 시작 옵션을 선택할 수도 있습니다.
Visual Studio가 DPI를 인식하지 않는 프로세스로 실행되면 디자이너 레이아웃 문제가 해결되지만 글꼴이 흐리게 표시되고 XAML 디자이너와 같은 다른 디자이너에서 문제가 나타날 수 있습니다. Visual Studio는 DPI를 인식하지 않는 프로세스로 실행될 때 다음과 같이 다른 알림 메시지를 표시합니다. "Visual Studio가 DPI를 인식하지 않는 프로세스로 실행됩니다. WPF 및 XAML 디자이너가 제대로 표시되지 않을 수 있습니다."
참고 항목
- DPI를 인식하지 않는 프로세스로 Visual Studio를 다시 시작하는 옵션을 선택하고 도구 창을 도킹 해제한 경우 해당 도구 창의 위치가 변경될 수 있습니다.
- 기본 Visual Basic 프로필을 사용하는 경우 또는 도구>옵션>프로젝트 및 솔루션에서 만들어질 때 새 프로젝트 저장 옵션을 선택 취소한 경우 Visual Studio는 DPI를 인식하지 않는 프로세스로 다시 시작될 때 프로젝트를 다시 열 수 없습니다. 그러나 파일>최근에 사용한 프로젝트 및 솔루션에서 프로젝트를 선택하여 열 수 있습니다.
참고 항목
- DPI를 인식하지 않는 프로세스로 Visual Studio를 다시 시작하는 옵션을 선택하고 도구 창을 도킹 해제한 경우 해당 도구 창의 위치가 변경될 수 있습니다.
- 기본 Visual Basic 프로필을 사용하는 경우 Visual Studio는 DPI를 인식하지 않는 프로세스로 다시 시작할 때 프로젝트를 다시 열 수 없습니다. 대신 파일>최근 프로젝트 및 솔루션을 통해 프로젝트에 액세스합니다.
Windows를 사용하여 디스플레이 배율을 100%로 설정
Visual Studio를 사용하여 디스플레이 크기 조정을 전환하지 않도록 하려면 Windows 설정에서 크기 조정을 조정합니다. 예를 들어 Windows 11에서는 크기 조정을 100%(96DPI)로 설정할 수 있습니다.
이렇게 하려면 작업 표시줄 검색 상자에 표시 설정을 입력하고 표시 설정 변경을 선택합니다. 설정 창에서 텍스트, 앱 및 기타 항목 크기 변경을 100% 로 설정합니다. 100% 크기 조정(96DPI)을 사용하면 사용자 인터페이스가 너무 작아서 실제로 사용할 수 없습니다.
DevEnv 명령줄 도구를 사용하여 크기 조정 사용 안 함
UI(사용자 인터페이스) 도구 대신 명령줄 도구를 사용하여 표시 설정을 관리하려면 DevEnv.exe를 사용합니다. 이 devenv.exe
명령은 /noscale
을 100% 배율 조정 모드에서 실행하기 위한 명령줄 매개 변수로 사용합니다 . 사용 방법은 다음과 같습니다.
- Visual Studio 메뉴 모음에서 도구>명령줄>개발자 명령 프롬프트를 선택합니다.
- 그런 다음,
devenv /noScale
을 입력합니다.
기타 옵션
앞서 언급한 옵션 외에도 다음 옵션을 시도할 수도 있습니다.
예를 들어 디자이너에서 작업하지 않는 경우 Visual Studio에서 크기 조정 알림을 사용하지 않도록 설정합니다. 알림을 사용하지 않도록 설정하는 방법은 다음과 같습니다.
- 도구>옵션을 선택하여 옵션 대화 상자를 엽니다.
- 옵션 대화 상자에서 Windows Forms 디자이너>일반을 선택하고 DPI 배율 알림을 False로 설정합니다.
문제 해결
Visual Studio에서 DPI 인식 전환이 작동하지 않는 경우 레지스트리 편집기에서 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe 하위 키에 dpiAwareness
값이 없는지 확인합니다. 값이 있는 경우 삭제합니다.