如何在 c# 中向图标添加文本
本文关键字:图标 添加 文本 | 更新日期: 2023-09-27 17:56:08
我想在系统托盘中显示一个图标[.ico文件],并在运行时添加一些文本。是否有任何本机 WPF 方法可以做到这一点?或 GDI+ 的片段也将不胜感激。
谢谢。
这是对我有用的代码,
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文件的文章 - 非常全面,对于您的需求可能有点矫枉过正,但您可以提取代码供您使用。