【入門編】Windows FormsのDPIスケーリングと高解像度ディスプレイ対応:4K環境でも文字やボタンがボケない・崩れないためのマニフェスト設定 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

Windows Formsの「ボケボケ画面」を卒業しよう:4K時代を生き抜くDPIスケーリング完全攻略

こんにちは。業務自動化の世界へようこそ。
長年Visual Basic (VB.NET)で現場を支えてきたエンジニアとして、今日は避けては通れない「高解像度ディスプレイ問題」にメスを入れます。

「作ったツールを4Kモニターで見ると、ボタンが小さすぎて押せない」「文字が滲んで目が痛い」……そんな経験はありませんか? それは、あなたのコードが悪いのではなく、Windowsの「スケーリング」という仕組みに対する「マニフェスト」の指示が足りていないからです。

今日は、あなたのVB.NETアプリを、どんなディスプレイでも美しく表示させるための「極意」を伝授します。

1. なぜアプリは「ボケる」のか?

Windowsには、画面を拡大表示する機能(DPIスケーリング)があります。
昔のWindows Formsアプリは、OSが「君は古いアプリだから、無理やり拡大して表示してあげるね(ビットマップ拡大)」と判断し、ぼやけた画像として引き伸ばしているのです。これが「ボケ」の正体です。

これを解決するには、「私は高解像度対応済みですよ! 勝手に拡大しないで、自分で描画します!」とWindowsに宣言する必要があります。それが「マニフェストファイル」の設定です。

2. 実践:アプリケーションマニフェストの設定

Visual Studioのプロジェクトに、この「宣言書」を追加しましょう。

1. ソリューションエクスプローラーでプロジェクトを右クリック。
2. 「追加」 > 「新しい項目」を選択。
3. 「アプリケーション マニフェスト ファイル」を選択して追加。
4. 生成された `app.manifest` ファイルの中に、以下の記述を探してコメントアウトを外す(または追加)します。





true/PM
PerMonitorV2, PerMonitor

ポイント: `PerMonitorV2` を指定することで、モニターを移動した際にもリアルタイムでスケーリングが追従するようになります。

3. VB.NETコードでの「ダメ押し」設定

マニフェストを書いただけでは不十分な場合があります。プログラムの起動時、OSに対して「高DPI対応モード」であることをプログラム側からも明示的に伝えるのが、熟練エンジニアの流儀です。

`Program.vb` (または `Sub Main`) の開始位置に以下のコードを置いてください。

Imports System.Windows.Forms

Module Program

Sub Main()
‘ 高DPI対応をOSに通知(Windows 10以降推奨)
If Environment.OSVersion.Version.Major >= 6 Then
SetProcessDPIAware()
End If

Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(New Form1())
End Sub

‘ Win32 APIを呼び出してDPI対応を宣言する

Private Function SetProcessDPIAware() As Boolean
End Function
End Module

4. 陥りやすい罠:レイアウト崩れとの戦い

マニフェストを設定すると、文字はクッキリしますが、ボタンやテキストボックスが重なったり、はみ出したりする現象が起きることがあります。これは、フォームのプロパティが「固定サイズ」で設計されているからです。

これを解決する「魔法のプロパティ」を教えます。

  • AutoScaleMode プロパティ: フォームの `AutoScaleMode` を `Dpi` に設定してください。
  • これで、OSの拡大率に合わせてコントロールのサイズが自動計算されます。
  • Anchor と Dock を活用:
  • コントロールを配置する際、なるべく `Anchor`(上下左右の固定)を使い、固定サイズを避けるのがコツです。

5. 最後に:エンジニアとしての一歩

ここまで設定できれば、あなたのアプリは4Kモニターでもボケることなく、凛とした美しい姿で表示されるはずです。

「マニフェスト」という言葉、最初は難しく聞こえたかもしれませんが、要は「OSとの対話」です。プログラムを書くということは、単に動くものを作るだけでなく、OSという巨大なシステムと正しく会話することでもあります。

この設定をクリアできたあなたは、もう初心者ではありません。自信を持って、美しいUIを持つアプリケーションを世に送り出してください!

何か分からないことがあれば、いつでも聞いてくださいね。一緒に最高の業務ツールを作り上げましょう。

タイトルとURLをコピーしました