Dot-Net

Windows 從多圖示文件中選擇錯誤的圖示並自行渲染為正確的大小

  • May 30, 2017

我有一個 .ico 文件,其中嵌入了 5 個圖示大小,用作主應用程序圖示和系統托盤圖示。

當它出現在工作列中時,該圖示使用的是所需的 16x16 格式。當圖示出現在通知區域/系統托盤中時,它使用的是 32x32 格式,而 Windows 將其渲染為 16x16 圖示,這看起來很糟糕。

如何強制 Windows 在通知區域中使用 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);

引用自:https://stackoverflow.com/questions/616500