問題タブ [dpi-aware]
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.
c# - DPI スケーリング >= 150% の高 DPI リソースをロードする NotifyIcon を取得できません
私のアプリケーションは DPI 対応です。完全なマニフェストは次のとおりです。
そして、NotifyIcon
アイコンのプロパティを次のように設定しています。
ただし、これは Windows 8.1 システムで 150% 以上の DPI スケーリングでは機能しません。100% に設定するとSystemInformation.SmallIconSize
16x16 サイズ (正しい) が報告され、125% に設定すると 20x20 サイズ (正しい) が報告されます。たとえば 150% を超えると、24x24 サイズが報告されるはずですが、代わりに 16x16 が報告され、間違った解像度が読み込まれます。私のアイコンファイルから。
次の記事 ( http://blog.quppa.net/2011/01/07/small-icon-size-dpi-in-windows/ ) を読むと...
WPF と WinForms はどちらも、引数 SM_CXSMICON (小さいアイコンの幅) と SM_CYSMICON (小さいアイコンの高さ) を受け取る Win32 GetSystemMetrics 関数をラップします。
つまり、おそらく自分自身を呼び出す必要はありませんGetSystemMetrics
よね?
どうすればこれを解決できますか?
PS: 私が開発中のオープンソース アプリケーションについて話しているので、完全なソース コードを詳しく調べたい場合は、こちら で確認できます。
java - Java 無効化 dpi 対応が機能しない
引数を指定して Java アプリケーションを実行しようとしてい-Dsun.java2d.dpiaware=false
ますが、何も起こりません。
UI がぼやけていることを期待していますが、通常のサイズのアイコンとフォントでは、このフラグは機能しないようです。
Windows 8.1 で JDK 1.8.0_45 を使用しています。
このバグhttps://bugs.openjdk.java.net/browse/JDK-8080153を見つけましたが、回避方法がわかりません。
windows - Windows コモン ダイアログを「モニターごとの DPI 対応」にする
MFCを使用してVS2008で作成されたプログラムがあります。これで、「モニターごとの DPI 対応」に変更して、ほぼ完了です。マニフェストを変更し、WM_DPICHANGE メッセージを処理しました。しかし、まだ 1 つの問題があります。
CFileDialogクラスを使用して開く/保存ダイアログを表示し、 SHBrowseForFolder関数を使用してフォルダー選択ダイアログを表示しました。ただし、これらのダイアログはすべて「モニターごとの DPI 対応」ではありません。DPI 設定が異なるモニター間でダイアログを移動しても、UI は調整されません。
これらのダイアログのメッセージを監視するためにスパイ++を使用しています.WM_DPICHANGEDメッセージを受信できることがわかりましたが、それを処理していません.
また、Windows 10 の notepad.exe でファイルを開くダイアログをテストしたところ、完全に機能しました。
これらのダイアログを「モニターごとの DPI 対応」にする方法を知っている人はいますか?
--------編集--------
さらに 2 つの問題があります。
- ウィンドウを異なる DPI のモニターに移動すると、ウィンドウのサイズは自動的に変更されますが、タイトル バーの高さとタイトルのフォント サイズは変更されません。
- チェックボックス コントロールのボックス サイズも変更されません。
これらの問題には何らかの関連があるのではないかと思いますが、わかりません。
--------悲しいニュース--------
Microsoft の「DPI チュートリアル サンプル」を VS2013 でコンパイルしましたが、同じ問題が発生しました。
https://code.msdn.microsoft.com/DPI-Tutorial-sample-64134744
wpf - 私の WPF アプリは、すぐに使用できるモニターごとの dpi 対応です。私はそれを期待していませんでしたか?
WPF のモニターごとの dpi 対応について少し混乱しています。さまざまなモニターでウィンドウを適切にスケーリングするには、いくつかの作業を行う必要があると思いました (モニターごとの DPI 対応 WPF アプリケーションの開発で説明されているように)。
しかし、2 台のモニター (2560x1440 と 2160x1440) を備えた PC でアプリを実行したところ、ダイアログをモニター間で移動すると、ダイアログが自動的にスケーリングされます。それは最新のファスト リング Windows 10 にあります。
c++ - dpi 非対応プロセスの dwm の倍率を取得するにはどうすればよいですか?
コントロールのサイズと位置は、ウィンドウ (dwm) によって変更されます。これを相殺するために、x と y の正確なスケーリングを取得する方法が必要です。
.exe
(3ds Max)へのプラグインを作成しているため、マニフェストを使用できません。3dsMax のマニフェストを変更できません (私はオートデスクではありません。setprocessdpiawareness()
別のプラグイン (dll)exe
であり、親プロセスのレイアウトを強制終了するため、 を呼び出すことはできません。
このソリューションは Windows 7、8、10 で動作するはずです。そのため、10 または 8.1 で導入された呼び出しは使用できません。
私はすでに試しました:
これは何も変更しません (ポイントは変更されません)。私は古い学校の C++ と一般的なコントロール (サブクラス化) を使用しています。親exeで実行されないため、WPFを使用できないため、WPFはありません。
コントロールのサイズと位置に魔法の「2 *」を追加した後、必要な場所に配置します。しかし、これは現在のモニターを備えた現在のマシンでのみ機能するハックです。
「2」を dwm が適用する乗数に置き換えたいと思います。
winforms - コントロール スクロールバーの幅の設定/スケーリング
モニターごとの DPI が変更された場合 ( WM_DPICHANGED
message )、リスト ビュー、ツリー ビュー、リッチ エディット、リストボックスなどのコントロールの組み込みスクロールバーは (予想どおり) スケーリングされません。
プログラムでスケーリングする必要があります。
スクロールバーのサイズを設定するためのAPIは見つかりませんでしたが(Win32でも、WinFormsでも)。
スクロールバーのサイズ (幅) を設定するには、どの API を使用できますか?
または、少なくともスクロールバーのハンドルを取得するにはどうすればよいですか? (内部的にスクロールバーは別個の子コントロールであると想定しています) ハンドルを取得したら、MoveWindow
それを使用してサイズを変更できると想定します(編集: @Anders の回答が示すように、私の仮定は間違っていました)
背景については、「Windows での高 DPI デスクトップ アプリケーションの開発」を参照してください。
重複しているように見える質問がいくつかありますが、実際には関連するものはありません。
そこにある回答は、システム全体の設定を変更するか、DataGrid
(インターフェイスで別の子スクロールバー コントロールを使用できる) のみで機能します。