高DPI未対応だとこうなる
(※サンプルファイルの「CZ1311Fix」に対応)
高DPIになると、どのような変化が起こるか確認してみましょう。
Windowsフォームで、640x480サイズのウィンドウを持ったサンプルアプリ(CZ1311Fix)を作成します。
このアプリを1366x768の解像度と1920x1080の解像度の同一サイズのタブレットで表示してみると、次のようになります。
物理的サイズが同一で解像度が上がるため、640x480のウィンドウ物理サイズは小さくなってしまいます。
ウィンドウサイズ調整対応だとこうなる
(※サンプルファイルの「CZ1311Wide」に対応)
それではウィンドウサイズが同じ見た目になるように、スクリーンサイズを取得して1366x768からの倍率を求めてウィンドウサイズを自動変更してみましょう。
Public Class MainForm Private Const BaseWidth As Integer = 1366 Private Const BaseHeight As Integer = 768 Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Width = Me.Width * My.Computer.Screen.Bounds.Width / BaseWidth Me.Height = Me.Height * My.Computer.Screen.Bounds.Height / BaseHeight End Sub End Class
Windowsフォームがロードされた時に、比率を求めてウィンドウサイズを変更します。このコードを実行すると、次のようにウィンドウサイズだけは同一になりますが、中のコントロールや文字の大きさは変わりません。
コントロールや文字サイズも対応するためには、求めた倍率を使ってフォーム内のすべての要素について処理を行わなければなりません。サンプルでは3個のコントロールのみでしたが多数のコントロールを使った画面ではかなりの手間となるでしょう。