私のアプリケーションは DPI 対応です。完全なマニフェストは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity name="SlackUI"
type="win32"
version="1.0.0.0" />
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</asmv1:assembly>
そして、NotifyIcon
アイコンのプロパティを次のように設定しています。
notifyIcon.Icon = new Icon(Program.Settings.Data.WhiteNotificationIcon ?
Properties.Resources.NotifyWhite : Properties.Resources.NotifyColor, SystemInformation.SmallIconSize)
ただし、これは 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: 私が開発中のオープンソース アプリケーションについて話しているので、完全なソース コードを詳しく調べたい場合は、こちら で確認できます。