2011-05-11 105 views
6

我想在系統托盤中顯示一個圖標[.ico .ico文件],並在運行時向它添加一些文本。 有沒有本土的WPF方式來做到這一點?或爲GDI +片段也將不勝感激。如何在c#中將圖標添加到圖標?

謝謝。

+0

我相當肯定的系統托盤不支持文本:),也許作爲工具提示壽。 – Aren 2011-05-11 00:47:00

+0

系統托盤圖標很小。你期望能在一個文本中填入多少文本? – Gabe 2011-05-11 01:15:50

+0

只有兩個數字... – iraSenthil 2011-05-11 02:23:04

回答

5

這裏是爲我工作的代碼,

public static Icon GetIcon(string text) 
{ 
    //Create bitmap, kind of canvas 
    Bitmap bitmap = new Bitmap(32, 32); 

    Icon icon = new Icon(@"Images\PomoDomo.ico"); 
    System.Drawing.Font drawFont = new System.Drawing.Font("Calibri", 16, FontStyle.Bold); 
    System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White); 

    System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap); 

    graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel; 
    graphics.DrawIcon(icon, 0, 0);    
    graphics.DrawString(text, drawFont, drawBrush, 1, 2); 

    //To Save icon to disk 
    bitmap.Save("icon.ico", System.Drawing.Imaging.ImageFormat.Icon); 

    Icon createdIcon = Icon.FromHandle(bitmap.GetHicon()); 

    drawFont.Dispose(); 
    drawBrush.Dispose(); 
    graphics.Dispose(); 
    bitmap.Dispose(); 

    return createdIcon; 
} 
+0

您可以將一行更改爲位圖bitmap = new Bitmap(icon.Width,icon.Height); – 2016-07-13 09:54:35

0

由於系統托盤圖標沒有伴隨文字,因此您可以將文字疊加在圖標本身上,也可以使用工具提示樣式的彈出窗口。

覆蓋文本(可能是通過將其嵌入程序生成的圖標中)會非常煩瑣,但更重要的可能是一個壞主意,因爲圖標最適合用來顯示分類狀態信息,更多詳細信息可用於流行-up文本或彈出窗口。例如,如果圖標代表收件箱狀態,則顯示「新郵件」而不顯示新郵件數量就足以顯示「新郵件」而不顯示新郵件。這允許顯示更清晰的圖標,而不需要用戶詳細解密。

灰色區域是指示過程狀態的圖標。你可能只有「正在進行中」與「完整」圖標,但我已經看到帶有嵌入進度條的圖標,我認爲這是一個很好的方法。顯然,一個小圖標中的進度條並不真正顯示精確的數字數據,並且可能更接近表示分類數據(根本無法完成,部分完成,完成),具體取決於分辨率。

如果您決定採用這種做法,那麼這個鏈接應該幫助:

  • Code Project article展示如何改變一個圖標,顯示彈出式文本,並使用WPF彈出窗口。

如果你仍然覺得你的用例值得在圖標上疊加文本,那麼我認爲程序生成圖標將成爲實現它的方式。我認爲你需要首先將文本添加到圖像,然後將其轉換爲圖標。這些鏈接應該幫你:

+1

你爲什麼認爲用一些文字在飛行中生成圖標是個壞主意?你還沒有回答我的問題如何在圖標上添加文字。 :( – iraSenthil 2011-05-11 02:24:48

+0

我認爲這通常是一個壞主意,因爲圖標最好用於顯示分類信息而不是精確的數字數據。我會更新我的答案以澄清這一點,併爲程序圖標創建添加一些提示,如果您仍然想要去 – Ergwun 2011-05-11 02:44:48

+3

我認爲沒有什麼是不好的,如果它增強用戶體驗 – iraSenthil 2011-05-11 03:23:09