从Webdings字体创建系统托盘图标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Webdings字体创建系统托盘图标相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个非常简单的系统托盘图标,它只是一个带有白色边框的动态彩色圆圈。为此,我们使用Webdings字体。 Webdings中的“n”只是一个简单的圆圈。

我目前正在做的几乎就在那里,但是在一些PC(但不是全部)上,它最终会在它周围形成一个波涛汹涌的黑色边框:

enter image description here

这是我得到的:

protected static Icon GetTrayIconFromCache(Color statusColor)
{
    Bitmap bmp = new Bitmap(16,16);                            
    Graphics circleGraphic = Graphics.FromImage(bmp);
    circleGraphic.DrawString("n", new Font("Webdings", 12F, FontStyle.Regular), Brushes.White, -3f, -2f);
    circleGraphic.DrawString("n", new Font("Webdings", 9F, FontStyle.Regular), new SolidBrush(statusColor), 0f, -1f);
    Icon ico = Icon.FromHandle((bmp).GetHicon());
    return ico;
}

无论我尝试什么,我都无法摆脱圆圈外面那些丑陋的黑点。它们没有出现在每个人身上......一些开发人员看不到它,看起来很干净。我们还没有弄清楚那些看起来不错的PC和不合适的PC之间的共性。

但是......有更好的方法吗?

答案

添加TextRenderingHintAntiAliasGridFit

protected static Icon GetTrayIconFromCache(Color statusColor)
{
    Bitmap bmp = new Bitmap(16,16);                            
    Graphics circleGraphic = Graphics.FromImage(bmp);

    circleGraphic.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

    circleGraphic.DrawString("n", new Font("Webdings", 12F, FontStyle.Regular), Brushes.White, -3f, -2f);
    circleGraphic.DrawString("n", new Font("Webdings", 9F, FontStyle.Regular), new SolidBrush(statusColor), 0f, -1f);
    Icon ico = Icon.FromHandle((bmp).GetHicon());
    return ico;
}

以上是关于从Webdings字体创建系统托盘图标的主要内容,如果未能解决你的问题,请参考以下文章

Shell_NotifyIcon 在系统托盘中创建空白、无响应的图标

如何使用 Python 和 GTK 创建具有自定义文本和透明背景的状态图标/系统托盘图标?

Qt设置系统托盘图标和程序图标

Qt5 (Linux/LXDE) 中不显示系统托盘图标

从系统托盘中的图标获取工具提示文本

Winforms 通知图标在系统托盘中重复