リソースでアイコンを直接使用する場合の問題は、アイコンファイルで適切なアイコンバージョンを選択する代わりに、フレームワークがデフォルトのアイコンバージョンを通知領域に必要なサイズに単純にスケーリングすることです。そのため、ギザギザのエッジが表示されます。
最高の品質を得るには、アイコンで適切なサイズを自分で選択する必要があります。
まず、NotifyIcon.Icon
リソース内のアイコンに直接設定する代わりに、新しいIcon
インスタンスを作成します。そうすることで、アイコンリソースで特定のアイコンサイズを選択できるようになります。を使用SystemInformation.SmallIconSize
すると、通知領域に必要なサイズが得られます。
それで :
myNotifyIcon.Icon = new Icon(Properties.Resources.MyIcon, SystemInformation.SmallIconSize);
これで、SystemInformation.SmallIconSize
常に正しいアイコンサイズが返されますが、アプリケーションがDPI対応の場合に限ります(それ以外の場合は、常に16が返されます)。アプリケーションがDPIに対応しておらず、DPIスケーリングが有効になっているシステムで使用されている場合、上の行でリソース内の16x16アイコンが選択され、通知領域に必要なサイズに拡大されます。 (言い換えれば、醜いアイコン)。
アプリをDPI対応にSystemInformation.SmallIconSize
することで、DPIスケーリングを考慮して適切なサイズを返します。たとえば、DPIスケーリングが150%の場合、SystemInformation.SmallIconSize
24(16×1.5)を返します。
アプリをDPI対応にするには、これをapp.manifestの<asmv1:assembly>
タグ内に追加するだけです。
<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>