アカウント名:
パスワード:
え、違うの? Win32デスクトップアプリに一本化されるの?
せっかく、全画面だけじゃなく、ウィンドウ表示も出来るようになって、High-DPI環境でも文字が汚くなく・・・って思ってたのに逆方向に行ってビックリですね。
> High-DPI環境でも文字が汚くなく
それは基本的にアプリの手抜きのせいだがSkypeのデスクトップアプリですらそうならWin32でのHigh DPI対応ってよっぽど面倒なんだな
そんな簡単じゃないです。HiDPIにはnot DPI aware/system DPI aware/Per-Display DPI awareの3種類があります。後に書いた方が、よりHiDPI対応の度合いが高いといえます。
簡単にPer-Display DPI awareにするには、現状ではストアアプリ(win10からはUWP)しかありません。system DPI awareならWPFにすることで可能ですが、.NETでもWindows Formsの対応は微妙な段階です。Win32では、関連するwindows messageへの対応とマニフェストへの記述が必要です。詳しくは「MDD DPI」とかで検索してみてください。
また、画像リソースがある場合は、DPIに(ある程度)あわせた画像を用意しないと悲しいことになりやすいのが現実です。
これら全てを行うのは負担が高いので、ぶっちゃけnot DPI awareにしてwindowsの自動調整に頼る方が楽です。まあ、それが「フォントが汚い」になるんですが。
メニューとかのサイズが常にプライマリモニタのDPIでスケールされるというWindows側の問題もある。GetSystemMetricsにモニタを識別できるような引数が存在しない(そして当然ながらすべてのWin32アプリはシステムメトリックがモニタによって変化することなど想定していない)という根本的な問題のせいだから解決の見込みがない。Windows 10でGetSystemMetricsForMonitorが追加されたという話も聞かないからWin32アプリのPer-monitor DPI対応はあまり現実的じゃない。
GetSystemMetrics()は16bit時代からの古いAPIですし将来の拡張も無いでしょう。GetDPIForMonitor()というAPIが追加されたようです。MSDNライブラリをHigh DPIで検索すると出てくると思います。
ただ、いずれにせよ自前でスケーリングするのは面倒くさいとは思います。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
はいはいUWPアプリUWPアプリ (スコア:0)
え、違うの? Win32デスクトップアプリに一本化されるの?
Re: (スコア:0)
せっかく、全画面だけじゃなく、ウィンドウ表示も出来るようになって、High-DPI環境でも文字が汚くなく・・・って思ってたのに逆方向に行ってビックリですね。
Re: (スコア:0)
> High-DPI環境でも文字が汚くなく
それは基本的にアプリの手抜きのせいだがSkypeのデスクトップアプリですらそうならWin32でのHigh DPI対応ってよっぽど面倒なんだな
Re: (スコア:0)
Win32 で既存アプリのHigh DPI 対応は、たしかに面倒くさいですけど、新規で作るならたいした手間かからないし、昨今のデスクトップアプリは、半数以上 .NET になってるとかって話なので、開発者が意識しなくてもできてたりします。
Re: (スコア:0)
そんな簡単じゃないです。
HiDPIにはnot DPI aware/system DPI aware/Per-Display DPI awareの3種類があります。後に書いた方が、よりHiDPI対応の度合いが高いといえます。
簡単にPer-Display DPI awareにするには、現状ではストアアプリ(win10からはUWP)しかありません。
system DPI awareならWPFにすることで可能ですが、.NETでもWindows Formsの対応は微妙な段階です。
Win32では、関連するwindows messageへの対応とマニフェストへの記述が必要です。詳しくは「MDD DPI」とかで検索してみてください。
また、画像リソースがある場合は、DPIに(ある程度)あわせた画像を用意しないと悲しいことになりやすいのが現実です。
これら全てを行うのは負担が高いので、ぶっちゃけnot DPI awareにしてwindowsの自動調整に頼る方が楽です。
まあ、それが「フォントが汚い」になるんですが。
Re:はいはいUWPアプリUWPアプリ (スコア:0)
メニューとかのサイズが常にプライマリモニタのDPIでスケールされるというWindows側の問題もある。GetSystemMetricsにモニタを識別できるような引数が存在しない(そして当然ながらすべてのWin32アプリはシステムメトリックがモニタによって変化することなど想定していない)という根本的な問題のせいだから解決の見込みがない。Windows 10でGetSystemMetricsForMonitorが追加されたという話も聞かないからWin32アプリのPer-monitor DPI対応はあまり現実的じゃない。
Re: (スコア:0)
GetSystemMetrics()は16bit時代からの古いAPIですし将来の拡張も無いでしょう。
GetDPIForMonitor()というAPIが追加されたようです。MSDNライブラリをHigh DPIで検索すると出てくると思います。
ただ、いずれにせよ自前でスケーリングするのは面倒くさいとは思います。