본문 바로가기
IT·테크 정보

[C# 개발 팁] 윈폼(WinForms) 고해상도(DPI) 모니터에서 폰트 및 디자인 깨짐 완벽 해결법

by topki 2026. 3. 26.
반응형

C# 윈폼(WinForms)으로 프로그램을 개발하다 보면, 내 모니터에서는 멀쩡하던 UI가 고객사의 고해상도(4K, QHD) 모니터나 노트북(확대 비율 125~150%)에서 실행했을 때 폰트가 흐릿해지거나 컨트롤 위치가 뒤죽박죽 엉키는 현상을 자주 목격하게 됩니다.

 

이는 윈도우의 DPI 스케일링(Scaling) 정책 때문입니다. 오늘은 별도의 외부 라이브러리 없이, 매니페스트 설정과 코드 몇 줄로 어떤 해상도에서도 칼날 같은 가독성을 유지하는 DPI-Aware 최적화 방법을 정리합니다.


1. 문제의 원인: 비인식(Unaware) 모드의 한계

기본적으로 윈폼 앱은 'DPI를 인식하지 못하는' 상태로 빌드됩니다. 윈도우 OS는 이 앱을 고해상도 모니터에서 강제로 늘리게 되고, 이 과정에서 폰트가 뭉개지는 '안티앨리어싱' 부작용이 발생합니다. 엔지니어링 관점에서는 시스템이 픽셀을 강제로 보간(Interpolation)하기 때문입니다.


2. 해결 방법 1: 애플리케이션 매니페스트(manifest) 수정 (가장 확실함)

가장 표준적인 방법은 앱 자체에 "나는 DPI를 인식할 줄 안다"라고 선언하는 것입니다.

vs2022에서 app.manifest를 추가

 

<application>...</application> 에 아래에 설명한 XML을 입력 후 저장 및 컴파일

 

  1. 비주얼 스튜디오 솔루션 탐색기에서 프로젝트 우클릭 -> [추가] -> [새 항목] -> [애플리케이션 매니페스트 파일(app.manifest)]을 추가합니다.
  2. 파일 내에서 <application> 태그 내부의 주석 처리된 windowsSettings 부분을 찾습니다.
  3. 아래와 같이 dpiAware 설정을 활성화합니다.
XML
 
<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
  </windowsSettings>
</application>

3. 해결 방법 2: Program.cs에서 코드 한 줄로 해결 (.NET 4.7 이상)

만약 매니페스트 수정이 번거롭다면, 프로그램 진입점(Main)에서 API를 호출하는 방법도 있습니다.

  1. Program.cs 파일을 엽니다.
  2. Application.Run() 호출 직전에 아래 코드를 삽입합니다.
C#
 
[STAThread]
static void Main()
{
    // .NET Framework 4.7 이상에서 권장되는 방식
    Application.SetHighDpiMode(HighDpiMode.SystemAware); 
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

4. 디자인 팁: AutoScaleMode 설정

코드 수정과 더불어 폼(Form)의 속성 창에서 AutoScaleMode를 반드시 DPI 또는 Font로 설정해야 합니다. None으로 설정할 경우 해상도에 따라 컨트롤이 겹치는 불상사가 발생할 수 있으니 주의가 필요합니다.


마치며

사용자의 하드웨어 환경은 제각각입니다. 개발자가 DPI 대응을 놓치면 아무리 훌륭한 로직의 프로그램이라도 '완성도 낮은 소프트웨어'로 전락하게 됩니다. 오늘 공유해 드린 매니페스트 설정 하나로 여러분의 프로그램을 어떤 환경에서도 프로페셔널하게 유지해 보시기 바랍니다.

반응형