Windowsはマルチアイコンファイルから間違ったアイコンを選択し、正しいサイズに自己レンダリングします
質問
5つのアイコンサイズが埋め込まれた.icoファイルがメインアプリケーションアイコンおよびシステムトレイアイコンとして使用されています。
タスクバーに表示されるとき、アイコンは必要な16x16形式を使用しています。 アイコンが通知領域/システムトレイに表示されるとき、32x32形式を使用しており、Windowsはそれを16x16のアイコンにレンダリングしていますが、これは恐ろしく見えます。
通知領域で16x16のアイコンサイズをウィンドウに使用させるにはどうすればよいですか? システムトレイにアイコンを配置するコードを次に示します。
ContextMenu cmNotify = new ContextMenu();
MenuItem miNotify = new MenuItem(Properties.Resources.Notify_Text);
miNotify.DefaultItem = true;
miNotify.Click += new EventHandler(notifyHandler);
cmNotify.MenuItems.Add(miNotify);
notifyIcon = new NotifyIcon();
notifyIcon.Icon = this.Icon;
notifyIcon.Visible = true;
notifyIcon.ContextMenu = cmNotify;
notifyIcon.Text = AppConstants.APPLICATION_NAME;
解決
両方の応答は近いですが、微妙な毒が含まれています。要求されたサイズを16x16としてハードコーディングしないでください。
代わりに、SystemInformation.SmallIconSizeを照会して適切な寸法を決定します。デフォルトは確かに16x16ですが、これはDPIスケーリングなどのさまざまなものによって変更される可能性があります。
このプロパティの詳細については、MSDNの記事を参照してください。
使用例は次のとおりです
notifyIcon.Icon = new System.Drawing.Icon(this.Icon, SystemInformation.SmallIconSize),
他のヒント
これを変更:
notifyIcon.Icon = this.Icon;
これ:
notifyIcon.Icon = new System.Drawing.Icon(this.Icon, 16, 16);
アイコンの新しいインスタンスを作成する必要があります。新しいインスタンスを作成(ロード)するときに、サイズを指定します。 Iconクラスのコンストラクターには、選択可能ないくつかの異なるオーバーロードがあります。アイコンファイルがメインの実行可能ファイルに埋め込まれている場合の方法は次のとおりです(多くの場合):
Assembly asm = this.GetType().Assembly;
var smallIconSize = new System.Drawing.Size(16, 16);
notifyIcon.Icon = new System.Drawing.Icon(
asm.GetManifestResourceStream("MyPrettyAppIcon.ico"), smallIconSize);
所属していません StackOverflow