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

8
我想在运行时在系统托盘中显示一个图标 [一个.ico文件],并添加一些文本。 有没有原生的WPF方法来实现这个?或者使用GDI+的片段也可以。 谢谢。

我相当确定系统托盘不支持文本:),或许可以作为工具提示。 - Aren
系统托盘图标很小,您希望在一个图标上放置多少文本? - Gabe
2个回答

7

这是对我有效的代码:

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
你可以将一行代码改为 Bitmap bitmap = new Bitmap(icon.Width, icon.Height); - Chris W

0

由于系统托盘图标没有文字陪伴,您可以在图标本身上叠加文本,或者使用工具提示样式的弹出窗口。

叠加文本(可能通过将它嵌入到程序生成的图标中)是非常琐碎的,但更重要的是可能是个坏主意,因为图标最好用于显示分类状态信息,更详细信息可在弹出式文本或弹出式窗口中提供。

例如,如果一个图标代表收件箱状态,则仅显示“新邮件”与“无新邮件”即可,而无需显示新邮件数量。这允许显示更清晰的图标,用户不需要详细解读。

一个灰色地带是指示过程状态的图标。您可以只有“进行中”与“完成”两种图标,但我见过有进度条嵌入其中的图标,我认为这是个巧妙的方式。显然,在微小的图标中的进度条并不能真正显示精确数值数据,并且根据分辨率可以更接近表达分类数据(未完成、部分完成、完成)。

如果您决定采用此方法,则此链接应该会有所帮助:

  • Code Project文章展示如何使用WPF更改图标,显示弹出文本和弹出窗口。

如果您仍然觉得您的用例需要在图标上叠加文本,则我认为以程序方式生成图标将是实现它的方法。我认为您需要先将文本添加到图像中,然后将其转换为图标。以下链接应该对您有所帮助:


1
你为什么认为动态生成带有文本的图标是个坏主意?你还没有回答我的问题,如何在图标上添加文本。:( - iraSenthil
我认为这通常是一个不好的想法,因为图标最适合用于显示分类信息而不是精确的数值数据。如果您仍然想继续,我会更新我的答案以澄清这一点,并添加一些程序化图标创建的提示。 - Ergwun
3
我认为如果能提升用户体验,任何事情都不会是坏的。 - iraSenthil
我的观点是,它很可能不会增强用户体验,或者可能有其他功能可以更好地增强用户体验。然而,由于我不知道您的具体情况,也许这是一个适当的解决方案。无论如何,我更新后答案中的链接应该会对您有所帮助。 - Ergwun
1
谢谢您的建议,IconLib并没有帮助到我。我将研究如何在WPF中创建图标。 - iraSenthil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接