murnana's diary

プリントの裏に書くとか、そんな感じです

Windowsの高DPI対応とか、ディスプレイの大きさとかってしんどい

高DPIの設定だと、ディスプレイの正確なピクセル数が取得できない問題。

そもそもDPIとはなんぞ…ということでまとめる

scrapbox.io

ふむふむ、要するに解像度のことか。

高DPI環境の簡易テスト方法

Windowsの設定にある、ディスプレイの解像度とスケールを変えればいい

改善前: SystemParametersInfo 関数を使用していた

SystemParametersInfo を使用して、メインディスプレイの大きさを調べていた。
残念ながらこの関数、何も設定していないと常に 96dpi で計算してしまう…

改善後: SetProcessDPIAware を呼び出す

GetDeviceCapsが常にDPI96を返す問題と解決方法について · GitHub

Windows 7 以降の対応をすれば良いので、遠慮なく呼び出した。 manifestファイルはないので一旦無視。

その他考察

Display Scaling in Windows 10

Microsoftの中の人たちが考えている、高解像度ディスプレイの対応について。

Display Scaling in Windows 10 | Ask the Core Team

細かくは読んでない ><

「Basic concepts and terms」にある画像を見てみると色々書いてある。 (画像だから気軽にGoogle先生できない。つらい)
しれっとpixcel/inchって書いてるのに、なぜか160「DPI」と書かれている。良いのか…?

Physical PixelsEffective Pixels 。ざっくり理解だと

  • Physical Pixels はディスプレイのドットに対して正確なピクセルのこと
  • Effective Pixels はどんなディスプレイ上でも、画面上に表示される大きさは同じ値なら同じ大きさになる

ということらしい。

Vieewing Distanceはとりあえずおいておく。

最後の Scale Factor が、Physical PixelsをEffective Pixelsに変換するための倍率のことのようだ。
Windowsの設定にあるスケールってこれのこと…?だろうか…?

関連するけどまだ読めてない奴ら

まだ読めてない ><
今は読む必要ないかな…と思って…

blogs.windows.com

docs.microsoft.com