9

メインアプリケーションアイコンとシステムトレイアイコンとして使用されている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;
4

3 に答える 3

15

どちらの応答も近いですが、微妙な毒が含まれています。要求されたサイズを 16x16 としてハードコーディングしないでください。

代わりに、SystemInformation.SmallIconSize をクエリして、適切なサイズを決定します。デフォルトは確かに 16x16 ですが、これは DPI スケーリングなどのさまざまな要素によって変更される可能性があります。

このプロパティの詳細については、MSDN の記事を参照してください。

使用例は次のとおりです。

notifyIcon.Icon = new System.Drawing.Icon(this.Icon, SystemInformation.SmallIconSize),
于 2009-11-03T23:15:44.517 に答える
7

これを変える:

notifyIcon.Icon = this.Icon;

これに:

notifyIcon.Icon = new System.Drawing.Icon(this.Icon, 16, 16);
于 2009-03-05T21:19:20.217 に答える
1

アイコンの新しいインスタンスを作成する必要があります。新しいインスタンスを作成 (ロード) するときに、サイズを指定します。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);
于 2009-03-05T21:03:45.013 に答える