亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

WPF デバイス非依存グラフィクス

未だにデバイス非依存グラフィクスがあんまりわかってなかったのでメモ。

ようするに、画面のDPIに比例してWPFのすべてのグラフィックスサイズはスケーリングされます。「それってWindowsフォームでも同じでは?」と思った方。正解です。結局のところ、ユーザーにとっては機能的に大きな違いはありません。
ただし、その仕組みは大きく異なります。Windowsフォームの自動スケーリングは、開発時点のDPIを記録しておき実行時にその環境合わせてリサイズするという動作となっています。つまり、Windowsフォームのピクセルはイコール物理ピクセルなので、96DPIの環境で100ピクセルだった幅は120DPIの環境では125ピクセルになっています(厳密には、AutoScaleModeプロパティの設定値がFontかDpiかで動作は異なりますが、画面のDPIを大きくするとシステムフォントも大きくなりますのでそれほど大きな差はないかと思います)。

DPIの変化に合わせて、

  • WindowsForm
    • コントロールのサイズ/位置を調整しなおす
  • WPF
    • コントロール描画の単位系そのものが変化する

という認識で良いのかな。
で、結局両方とも自動では行われますよ、と。