2011-05-11 103 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