オプションの背景情報子ウィンドウはモニタごとのアプリケーションで親と同じDPIを持っていますか?
は、しばらく前に、私は、特にテキストのサイズとのDLU語るthis questionを尋ねると、私は、各DPIの意識が実際に何を意味するのか知らずに行われました。しかしどこにも行かなかった。私の実装固有の問題ではなく、そこから出てくる一般的な問題( "xx問題"?)について質問することで、明確な疑問を書かなかったのは私のせいかもしれません。
私はダイナミックなGUIレイアウトエンジン(存在と可視性を制御するための変更を処理できる)を作成していて、ベースユニットがどのウィンドウを基準にしているかを知る必要があったので質問しました。当時、私は座標を親に基づいて決定し、サイズは子供に基づいて決定するべきだと判断しましたが、今は子のDPIが親のDPIよりも大きい場合に問題を引き起こすことに気付きます。
もちろん、このタイプのものはDLUの計算を超えています。例えば、両方の垂直半分に画像を描画するウィンドウは、モニタごとのDPIが真ん中を右に移動することを心配する必要があります。ですから、私は一般的で曖昧でない質問をすることができます。
- https://msdn.microsoft.com/en-us/library/windows/desktop/dn469266(v=vs.85).aspx
- https://msdn.microsoft.com/en-us/library/windows/desktop/mt744321(v=vs.85).aspx
実際の質問
今日、私はこの二つのMSDNの記事を見つけましたそれらを読んだ後、私は今のシステムDPIのawarenessesについては、このくらいの理解:
PROCESS_SYSTEM_DPI_AWARE
- 何かのDPIを求めたときに、システムがプライマリモニタ
- のDPIにこの値を与えますではないので、プログラム
- の生涯を通じて変更されることはありませんすることができ
古いを呼び出すことと同じですDPI以外
PROCESS_DPI_UNAWARE
PROCESS_PER_MONITOR_DPI_AWARE
- ウィンドウがオンであることを起こるものは何でも、モニタのDPIを与えるシステムに固定されています。それが変更されると
WM_DPICHANGED
が送信されます - このメッセージのページには、DPIが変更された場合にもこの問題が発生する可能性があります。 (所有していない)
PROCESS_PER_MONITOR_DPI_AWARE
の場合は、すべての子のDPIでのウィンドウを:私はあなたが今
- ウィンドウがオンであることを起こるものは何でも、モニタのDPIを与えるシステムに固定されています。それが変更されると
PROCESS_SYSTEM_DPI_AWARE
等
私が知りたいのですが何があることを行うことができます知りませんでした親ウィンドウと同じウィンドウ?
最高の点に注意してください:プログラムの寿命を変えないDPIについての部分は、他の2つの認識値に対して答えが「はい」であることを意味します。
別の例として、両端に100px幅の2つのコントロールがある300px幅のウィンドウがあるとします。コントロールの1つが1つのモニタにあり、他のコントロールが別のコントロールにあるようにDPIを持つ2つのモニタ間でそのウィンドウをドラッグし、DPIに照会すると(GetDC()
とGetDeviceCaps()
)、それらは同じですか?
答えが「はい」の場合、親ウィンドウと子ウィンドウの間の座標変換について心配する必要はありません。
答えが「いいえ」の場合、次の質問は子ウィンドウに送信されるWM_DPICHANGED
か、トップレベルのみに送信されますか?私はまだ子供たちのDPIが変わったときを知る方法が必要なので、少なくともを試してみてください。を正しく見えるように並べ替えるようにしてください(私はまだやり方を考え出していません。しかし、私はちょうどMulDiv()
であるはずです)。
ありがとうございました。
私はまだDPI対応のコードを書いていません。異なるDPIの複数のモニター間でDPI対応のウィンドウがどのように処理するのか疑問がありました。 –