前提・実現したいこと
モダンなWindowsAPIにおいて高解像度ディスプレイ対応を意識したPer-Monitor and Per-Monitor V2 DPI Awareness
など向けのAPI群があると思いますが
(1)どのようにすれば正確にウィンドウの情報を取得できるでしょうか?
GetWindowRect
やGetClientRect
は高解像度ディスプレイ以前にAeroなどの影を含むサイズを返しているのか正常なサイズを取得できません。
そこでGetWindowRect
の代わりにDwmGetWindowAttribute
などの値を取得する方法が調べると出てきますがスクリーンショットを取って確認しても1pxズレていることがあります。スクリーンショットのサイズが正しいとは限りませんが
(2)どの値を基準に描画などをすればいいのかわかりません。
例えば高解像度ディスプレイにおいてClient領域のサイズを直接取得する関数を私は知らないのですが
Hi-DPIな関数AdjustWindowRectExForDpi
を使ってクライアント領域を割り出すにしてもDwmGetWindowAttribute
由来の1pxのズレが効いてくる可能性はあります。BitBlt関数の画面比や描画領域などわずかですが誤差が出るかもしれません。
(3)Client領域のベストな取得方法はなんでしょうか?
Windows11の発表もありこれ以降も環境は刻々と変わっていく気はしますがStoreもWin32を許容しましたしよろしくお願いします。
環境
Windows 10 Pro (19043.1081)
Visual Studio 2022 Preview (WinSDK 10.0.18362.0)
ディスプレイはDPI 96と192で検証
あなたの回答
tips
プレビュー