2017-01-29 25 views
2

オプションの背景情報子ウィンドウはモニタごとのアプリケーションで親と同じDPIを持っていますか?

は、しばらく前に、私は、特にテキストのサイズとのDLU語るthis questionを尋ねると、私は、各DPIの意識が実際に何を意味するのか知らずに行われました。しかしどこにも行かなかった。私の実装固有の問題ではなく、そこから出てくる一般的な問題( "xx問題"?)について質問することで、明確な疑問を書かなかったのは私のせいかもしれません。

私はダイナミックなGUIレイアウトエンジン(存在と可視性を制御するための変更を処理できる)を作成していて、ベースユニットがどのウィンドウを基準にしているかを知る必要があったので質問しました。当時、私は座標を親に基づいて決定し、サイズは子供に基​​づいて決定するべきだと判断しましたが、今は子のDPIが親のDPIよりも大きい場合に問題を引き起こすことに気付きます。

もちろん、このタイプのものはDLUの計算を超えています。例えば、両方の垂直半分に画像を描画するウィンドウは、モニタごとのDPIが真ん中を右に移動することを心配する必要があります。ですから、私は一般的で曖昧でない質問をすることができます。


実際の質問

今日、私はこの二つのMSDNの記事を見つけましたそれらを読んだ後、私は今のシステムDPIのawarenessesについては、このくらいの理解:

  • PROCESS_SYSTEM_DPI_AWARE
    • 何かのDPIを求めたときに、システムがプライマリモニタ
    • のDPIにこの値を与えますではないので、プログラム
    • の生涯を通じて変更されることはありませんすることができ
  • 古いを呼び出すことと同じですDPI以外 PROCESS_SYSTEM_DPI_AWARE
  • PROCESS_DPI_UNAWARE
  • PROCESS_PER_MONITOR_DPI_AWARE
    • ウィンドウがオンであることを起こるものは何でも、モニタのDPIを与えるシステムに固定されています。それが変更されるとWM_DPICHANGEDが送信されます
    • このメッセージのページには、DPIが変更された場合にもこの問題が発生する可能性があります。 (所有していない)PROCESS_PER_MONITOR_DPI_AWAREの場合

      は、すべての子のDPIでのウィンドウを:私はあなたが今

私が知りたいのですが何があることを行うことができます知りませんでした親ウィンドウと同じウィンドウ?

最高の点に注意してください:プログラムの寿命を変えないDPIについての部分は、他の2つの認識値に対して答えが「はい」であることを意味します。

別の例として、両端に100px幅の2つのコントロールがある300px幅のウィンドウがあるとします。コントロールの1つが1つのモニタにあり、他のコントロールが別のコントロールにあるようにDPIを持つ2つのモニタ間でそのウィンドウをドラッグし、DPIに照会すると(GetDC()GetDeviceCaps())、それらは同じですか?

答えが「はい」の場合、親ウィンドウと子ウィンドウの間の座標変換について心配する必要はありません。

答えが「いいえ」の場合、次の質問は子ウィンドウに送信されるWM_DPICHANGEDか、トップレベルのみに送信されますか?私はまだ子供たちのDPIが変わったときを知る方法が必要なので、少なくともを試してみてください。を正しく見えるように並べ替えるようにしてください(私はまだやり方を考え出していません。しかし、私はちょうどMulDiv()であるはずです)。

ありがとうございました。

+0

私はまだDPI対応のコードを書いていません。異なるDPIの複数のモニター間でDPI対応のウィンドウがどのように処理するのか疑問がありました。 –

答えて

1

ウィンドウの大部分が他のモニタに渡っているとシステムが判断した場合、最上位ウィンドウにはWM_DPICHANGEDが送信され、新しいDPIのウィンドウ全体がサイズ変更されることが予想されます。

つまり、システムでは、DPIが混在したウィンドウは作成されません。

+0

したがって、すべての子供はトップレベルのDPIを持っています。ありがとう! (私は、モニターの中間に窓を持っている人は、そのスケーリングのために半分がぼやけていると驚くだろうと思っていますが、まだ高DPIモニターがないので、わかりません)/ – andlabs

+1

テストには高DPIモニターが必要です。 2つのモニターが必要です。できるだけそれらの1つをバンプしてください。確かにそれは愚かに見えますが、あなたはシステムをテストすることができます。 –

+1

OPが考えていなかったケース、つまりコンテキストメニューもカバーすることを検討してください。 –

関連する問題