WPF 関連の更新を多々しているモノトーンです。.NET Framework 4.6 で境界線の太さの揺らぎをなくす仕組みが導入されたみたいですが、Per-monitor DPI に関してはブラックアウト領域をなくすための対応しか入っていないみたいですね。そこで、新ライブラリーを開発しました。
概要
- 新ライブラリーを作成した理由
- Per-monitor DPI Support Library の挙動について、日本語解説
- まとめ
1. 新ライブラリーを作成した理由
さすがに古いバージョンは Windows 8.1 Preview のころに作成したもので、あまり情報もない状態でテキトーに作ったものをそのまま公開していてあまりにもひどい出来だったって理由もあります。
https://github.com/mntone/PerMonitorDpi
MntoneUIFramework (C++) のほうで Per-monitor DPI について調べてそれにて蓄積した検証データをこのライブラリーにも反映するのもアリだと思ったのですが、どうせなら新しいものを作ってしまおうという考えですね。
2. Per-monitor DPI Support Library の挙動について、日本語解説
Github に軽く解説が書いてあるのですが、これを日本語で。
2.1. 場合 1: 設定変更
ユーザーはコントロール パネルで DPI を変更することができます。そのとき Windows は WM_DPICHANGED
を投げます。
このケースでは、DPI 変更とウィンドウサイズ変更で対応します*1。
2.2. 場合 2: ウィンドウの移動
ユーザーはキャプションバーをクリックしてウィンドウを移動することができます。そのとき Windows は DPI の変更を検知 (ウィンドウの表示領域が半分以上別ディスプレイに移ると発火します) すると WM_DPICHANGED
を投げます。
このケースでは、DPI 変更とウィンドウサイズ変更で対応します*2。
2.3. 場合 3: ウィンドウのサイズ変更
ユーザーは境界線をクリックしてウィンドウのサイズを変更することができます。そのとき Windows は DPI の変更を検知 (ウィンドウの表示領域が半分以上別ディスプレイに移ると発火します) すると WM_DPICHANGED
を投げます。
このケースでは、DPI 変更で対応します。
3. まとめ
Per-monitor DPI Support Library は GitHub と NuGet で公開しています。ライセンスは MIT です。