■100386 / ) |
Re[3]: 高DPI使用時のフォームのレイアウト崩れ対応 |
□投稿者/ Azulean (1247回)-(2022/07/23(Sat) 09:31:24)
|
■No100369 (こいち さん) に返信 > Exeで作成したものは、app.manifest が効いているせいだと思うんですが、いい感じで表示されています。 > 100%表示のフォームの内容がそのまま拡大されたように見えます。
これは「高 DPI に非対応」という扱いで、「DPI 仮想化」という仕組みが動いています。 100% 表示のものを拡大して見せるので「ぼやけ」ていますので、高 DPI 環境で使い人にとって「いい感じ」とは言いがたいです。 (あくまで、過去のアプリをとりあえず使えるようにする&開発者がさぼっても困らない程度のものでしかなく、高 DPI に対応しているとは言えない代物です)
> dllの場合、どう対応すればよいのでしょうか・・・
原則的に、DPI に対応している・対応していないは「プロセス単位」となりますので、DLL 提供の場合、 manifest で制御することはできず、「DPI 仮想化前提で割り切る」は難しいことかと思います。 (スレッド分けすればできるのかもしれないが、Windows Forms の複数スレッド運用も非推奨ですし… https://docs.microsoft.com/ja-jp/windows/win32/hidpi/high-dpi-improvements-for-desktop-applications )
であれば、きちんとスケーリング対応すれば良い…となるところですが、Windows Forms のコントロール自体、対応仕切っていないところも多く、4.x で修正されたり、.NET Core 以降で修正されたりしているものがある現状です。
・AutoScaleMode を適切に設定する(Dpi あたりが良いかも) ・コントロールによっては、Font プロパティを親からの継承ではなく、個別に明示的に設定する ・AutoSize/Anchor プロパティに過度に頼らない(二重に調整されてうまく動かないなどあったかも…)
「お手軽に対応できることはない」「完璧に対応することは著しく困難であるか、不可能である」と理解しておいてください。
|
|