高DPIにWindowsフォームアプリケーションを対応させる方法

何も考えずにWindowsフォームアプリケーションを作り高DPIのPC上で起動するとこんな感じにボヤけた表示になる。

f:id:powerbombkun:20211225003553p:plain
高DPI未対応

これはアプリケーションが高DPI環境に対応できていないためだ。
ボヤけたままの表示はダサいし、文字が見えにくいので対応したいと思い調べたところ、このURLで対処法が書かれていた。
social.msdn.microsoft.com

方法としては、Program.csでフォーム作成前にSetProcessDPIAwareをコールするように実装すればよいらしい。

/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{

    if (Environment.OSVersion.Version.Major >= 6) SetProcessDPIAware();
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool SetProcessDPIAware();

これで再度ビルドして起動してみたところキレイに表示できました。

f:id:powerbombkun:20211225004352p:plain
高DPI対応

めでたしめでたし。