ご無沙汰です (死
艦これにはまりすぎました。。。
10/12 に開催された めとべや東京勉強会 #2 にて LT させて頂きました。
内容は 前回 の続きで、Windows 8.1 RTM 版において Per-Monitor DPI がどうなったのかと、その WPF での対応方法のお話です。
残念ながら Windows 8.1 RTM でも WPF アプリケーションは Per-Monitor DPI 非対応 (というか explorer.exe ですら非対応) で、DPI 仮想化でボケます。
LT 中にも言いましたが、この DPI 仮想化でボケた状態というのは、画面解像度がディスプレイの適正解像度と合っていない状態で使っている (たとえば、1920 x 1080 のディスプレイを 1366 x 768 で使ってる) ような気持ち悪さがあるので、私は到底我慢ならないのです。
モニターごとに DPI が設定されるのは待ち望んでいた機能なだけに、かなり残念…
ということで、自前で対応してしまおうという試み。
P/Invoke 祭りですが、現在のモニターの DPI 値と、DPI が変わったタイミングは得られるので、ScaleTransform で Window の Content ごとスケーリングすればそれっぽく見えるでしょう、というものです。
LT でデモしたサンプルアプリは、バグを直したら公開します。
サンプル アプリ (と、ついでに Per-Monitor DPI の解説記事) を公開しました!
Windows 8.1 で加わった Per-Monitor DPI と WPF での対応方法
他にうまい実装方法がありましたら、ぜひご教示いただきたく!
Pingback: Windows 8.1 で加わった Per-Monitor DPI と WPF のあれこれ | grabacr.nét