如何在c#中添加文本到图标?

时间:2011-05-11 00:40:12

标签: c# .net wpf gdi+ gdi

我想在系统托盘中显示一个图标[.ico文件],并在运行时添加一些文本。 是否有任何原生WPF方式可以做到这一点?或GDI +的片段也将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

由于系统托盘图标没有附带文本,因此您可以在图标上叠加文本,也可以使用工具提示式弹出窗口。

覆盖文本(可能通过将其嵌入程序生成的图标中)会非常繁琐,但更重要的是可能是一个坏主意,因为图标最适合用于显示分类状态信息,更多详细信息可用于弹出式文档文本或弹出窗口。

例如,如果图标表示收件箱状态,则显示“新邮件”与“无新邮件”就足够了,而无需显示新邮件的数量。这样就可以显示更清晰的图标,而不需要用户详细解读。

灰色区域是指示进程状态的图标。你可以只使用“进行中”而不是“完整”图标,但我已经看到嵌入了进度条的图标,我认为这是一种巧妙的方式。很明显,微小图标中的进度条并没有真正显示精确的数字数据,并且可以更接近于根据分辨率表达分类数据(根本没有完成,部分完成,完成)。

如果您决定采用这种方法,那么此链接应该有所帮助:

如果您仍然认为您的用例值得在图标上叠加文本,那么我认为在程序上生成图标将是实现此目的的方法。我想你首先需要将文本添加到图像中,然后将其转换为图标。这些链接可以帮助您: