2

こんにちは、現在の解像度に基づいてウィンドウの位置を計算する DPI 対応アプリケーションを実装しています。

DPI設定を変更してもOSが再ログインを要求しないWindows 8.1で以下のコードをテストしました。DPI をすぐに適用します。

  var presentationSource = PresentationSource.FromVisual(this);
  transform = presentationSource.CompositionTarget.TransformToDevice;

  int width = transform.m11 * SystemParameters.PrimaryScreenWidth;
  int height = transform.M22* SystemParameters.PrimaryScreenHeight;

しかし、ログアウトして再ログインせずに mspanel を使用して DPI を変更すると、TransformToDevice() は新しい値ではなく古い値を返します。DPIの設定が変わればこの変換マトリックスも変わると思っていました。

DPI 設定が変更されたときに呼び出すメソッドはありますか?

4

1 に答える 1

2

あなたの環境のDPI設定はわかりませんが、「ログアウトして再ログインせずに」DPIを変更することについて話しているので、Windows 8.1のモニターごとのDPI機能が有効になっていると思います。

モニターごとの DPI 環境では、モニター DPI はサインアウトして再サインインしなくても即座に変更できますが、システム DPI はサインアウトして再サインインするまで変更に従いません。システム DPI を取得します。代わりに、 P/Invoke でGetDpiForMonitorを使用して、現在のモニター DPI を取得する必要があります。

于 2014-11-23T00:39:04.973 に答える