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

本文关键字:图标 添加 文本 | 更新日期: 2023-09-27 17:56:08

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

谢谢。

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

这是对我有用的代码,

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;
}

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

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

例如,如果图标表示收件箱状态,则显示"新邮件"与"无新邮件"就足够了,而无需显示新邮件的数量。这允许显示更清晰的图标,而无需用户详细破译。

灰色区域是指示进程状态的图标。您可以只使用"进行中"图标与"完整"图标,但是我看到过嵌入进度条的图标,我认为这是一种巧妙的方法。显然,小图标中的进度条并没有真正显示精确的数字数据,并且可能更接近于表达分类数据(根本没有完成,部分完成,完成),具体取决于分辨率。

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

  • 演示如何使用 WPF 更改图标、显示弹出文本和弹出窗口的代码项目文章。

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

  • 打开用于向图像添加文本的代码 C# 代码段
  • Code Prject 关于动态创建.ico文件的文章 - 非常全面,对于您的需求可能有点矫枉过正,但您可以提取代码供您使用。