C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 174 を表示中)
■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 プロパティに過度に頼らない(二重に調整されてうまく動かないなどあったかも…)


「お手軽に対応できることはない」「完璧に対応することは著しく困難であるか、不可能である」と理解しておいてください。
返信 編集キー/


管理者用

- Child Tree -