Skip to content

ディスプレイのDPI取得を誤っている場合がある #555

@zmatsuo

Description

@zmatsuo

手もとでテストしていると、うまく取得できないことがあるようです。
環境はWindows10でシングルディスプレイです。

設定から、拡大縮小とレイアウトで、100%から125%に切り替えたとき、
発生します。

(1) WM_DPICHANGED の LOWORD(wparam) は 120
(2) GetMonitorInfoW()->CreateDCW()->GetDeviceCaps(LOGPIXELSX)は 96 を返す
(3) GetDpiForMonitor()は 120 を返す

(2)は現在の実装で c974cd9 で変更しました。
(3)は変更前の実装です。

DPI変更に伴ってウィンドウのサイズと位置を変更したとき、
ウィンドウを表示するディスプレイのDPIが変更後のDPIが異なっていたら、
Windowsが再度WM_DPICHANGEDメッセージを発生してしまうかもしれません。

手もとでのテストはシングルディスプレイなので問題ありませんが、
解像度が異なっているディスプレイをまたぐ際、
場合によっては WM_DPICHANGED が大量に発生して
サイズがバタバタと切り替わる場合があるかもしれません。
(DPI取得がうまくいかなかった場合、どんな望まない動作が発生するかよくわかっていません)

追試いただけないでしょうか。


(3)のGetDpiForWindow() ですが、
APIのページ の説明、
既存のアプリケーションの更新
の説明、
(英語ページのほうが見やすいかもしれません Updating Existing Applications )
ともにモニタごとの解像度変更に対応している感じがします。🤔

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions