問題タブ [hidpi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winforms - WinForms DpiChanged イベントをトリガーするにはどうすればよいですか?
(いいえ、このコードベースを .NET Core 以降にアップグレードすることはまだできません。)
主に Windows フォームで、部分的に WPF のアプリがあります。実行時にフォント サイズが変更された場合、WPF は正しく反応します。代わりに、Windows フォームは、再起動しない限り、何かが変更されたことさえ認識していないようです。たとえば、Control.DeviceDpi
プロパティ(4.7 まで導入されなかった) は、現在の値ではなく、起動時の正確な値を示します。
私app.manifest
は持っています:
私app.config
は持っています:
しかし、4.7ではイベントが導入されました。Control.DpiChanged
それでも、オーバーライドWndProc
してリッスンするとWM_DPICHANGED
、それが発生します。このコードは、イベントが発生することを示唆しているようです。
どうやら、このコードは条件付きでオフにするため、そうではありません。しかし、どの部分が資格がないのかわかりません。(私は Windows 10 21H1 を使用しているため、RS2 よりも新しいものです。)
windows - LoadCursor と混合 DPI 複数モニター
LoadCursor
関数を使用してリソースからカーソルをロードすると、結果はHCURSOR
異なるモニター間で使用でき、常に正しいサイズで表示されます。
すなわち: 通常:
- 96 dpi モニターでは、32x32 リソースが使用されます。
- 192 dpi モニターでは、64x64 リソースが使用されます。
ただし、メモリからカーソルをプログラムで作成すると (たとえば、 and を使用LookupIconIdFromDirectoryEx
してCreateIconFromResourceEx
)、結果のカーソルの解像度は固定されます。これは、混合 DPI マルチモニター設定で、少なくとも 1 つのモニターで間違ったサイズで表示されることを意味します。
もチェックアウトしましたがLoadCursorFromFile
、これも のような動的解決動作を提供しますLoadCursor
。
表示されているモニターに応じて動的に切り替わるカーソルをプログラムで作成する方法はありますか? ロードされたカーソルが異なる動作をするために、舞台裏でどのような魔法が起こっているのLoadCursor
でしょうか?
c# - MFC ネイティブ アプリで WindowsFormsHighDpiAutoResizing を有効にする
WinForms コントロールを含む ac# アセンブリを参照する、CLR サポートが有効な MFC アプリケーション (.net Framework 4.7.2)。これらのコントロールは Control.DeviceDpi を使用しますが、実行時にこの API は常に 96 を返します。
EnableWindowsFormsHighDpiAutoResizing を使用して MFCApplication.exe.config を追加すると、問題が解決します。Control.DeviceDpi は正確な dpi を報告します。
この .config を MFCApplication.exe に埋め込む方法はありますか? または、起動時にこのフラグをプログラムで設定できますか? この点でベストプラクティスはありますか?