图标字体包含符号而不是数字和字母。在Web技术中,与其他图像格式相比,图标字体占主导地位。由于它们是矢量图形,体积小、易于装载,因此 用户 可以在不降低质量的情况下上下缩放。但唯一的限制就是单个图标只能用一种颜色绘制。
相信每一位小伙伴都会经常都有这样的疑问:可以在桌面应用程序Essential Stu dio for Windows Forms中使用图标字体吗?答案是肯定的!本文就为你讲解具体的操作 方法 。
首先,请记住,在DPI的情况下,我们只需要改变字体大小,不需要为不同的DPI缩放维护不同大小的图像。
如何 添加 和绘制图标字体
系统中通常可用的字体(如Arial、Times New Roman)可能没有我们需要在应用程序中使用的图标,但有许多 支持 创建图标字体的在线和离线应用程序。Syncfusion就免费提供了 一个 名为Metro Stu dio 的离线工具。
为了演示,我们创建了 一个 .ttf 文件 ,其中包含 一个 名为“WF Fabric”的字体系列。结果图标如下图所示。
△ 来自WF Fabric.ttf 文件 的图标字体
*注意:上图中 显示 的Unicode(e700,e701等)表示在应用程序中绘制时的相应字形。
在WinForms应用程序中包含WF Fabric.ttf 文件 ,并在 属性 对话框中将其Build Action 标记 为Em bed ded Resource。
△ WF Fabric.ttf 文件 标记 为嵌入式资源
在表单初始化期间, 包括 在系统内存中 注册 图标字体的 代码 。与其他字体(Arial、Times New Roman等)一样,WF Fabric也将在控制面板\所有控制面板项\字体的系统内存中 注册 。
public?Form1()<font></font>
{<font></font>
????InitializeComponent();<font></font>
????this.Paint?+=?Form1_Paint;<font></font>
}<font></font>
<font></font>
private?void?Form1_Paint(object?sender,?PaintEventArgs?e)<font></font>
{<font></font>
????PrivateFontCollection?pfc?=?new?PrivateFontCollection();<font></font>
????//Extracting?icon?fonts?from?the?WF?Fabric.ttf?file?and?adding?into?sy stem ?memory.<font></font>
????Stream?fontA sst ream?=?this.GetType().Assembly.GetManifestResourceStream("WindowsFormsApp1.WF?Fabric.ttf");<font></font>
????byte[]?fontAsByte?=?new?byte[fontA sst ream.Length];<font></font>
????fontA sst ream.Read(fontAsByte,?0,?(int)fontA sst ream.Length);<font></font>
????fontA sst ream.Close();<font></font>
????IntPtr?memPointer?=?Sy stem .Runtime.InteropServices.Marshal.AllocHGlobal(Sy stem .Runtime.InteropServices.Marshal.SizeOf(typeof(byte))?*?fontAsByte.Length);<font></font>
????Sy stem .Runtime.InteropServices.Marshal. cop y(fontAsByte,?0,?memPointer,?fontAsByte.Length);<font></font>
????pfc.AddMemoryFont(memPointer,?fontAsByte.Length);<font></font>
}<font></font>
着至关重要的作用。pfc对象中的Families 属性 将保存已保存的字体系列 名称 。如上所述,我们创建了WF Fabric.ttf,其字体系列 名称 为WF Fabric。下载Essential Stu dio for Windows Forms最新版
现在创建 一个 枚举,其中包含具有相应 名称 的所有图标字体,并为其Unicode指定前缀0x。因此,无论您使用图标字体绘制何处,Unicode都将转换为字符串并作为参数传递给DrawString 方法 。
public?partial?class?Form1?:?Form<font></font>
{<font></font>
????public?Form1()<font></font>
????{<font></font>
????????InitializeComponent();<font></font>
????????this.Paint?+=?Form1_Paint;<font></font>
????}<font></font>
<font></font>
????private?void?Form1_Paint(object?sender,?PaintEventArgs?e)<font></font>
????{<font></font>
????????PrivateFontCollection?pfc?=?new?PrivateFontCollection();<font></font>
????????//Extracting?icon?fonts?from?the?WF?Fabric.ttf?file?and?inserting?into?sy stem ?memory.<font></font>
????????Stream?fontA sst ream?=?this.GetType().Assembly.GetManifestResourceStream("WindowsFormsApp1.WF?Fabric.ttf");<font></font>
????????byte[]?fontAsByte?=?new?byte[fontA sst ream.Length];<font></font>
????????fontA sst ream.Read(fontAsByte,?0,?(int)fontA sst ream.Length);<font></font>
????????fontA sst ream.Close();<font></font>
????????IntPtr?memPointer?=?Sy stem .Runtime.InteropServices.Marshal.AllocHGlobal(Sy stem .Runtime.InteropServices.Marshal.SizeOf(typeof(byte))?*?fontAsByte.Length);<font></font>
????????Sy stem .Runtime.InteropServices.Marshal. cop y(fontAsByte,?0,?memPointer,?fontAsByte.Length);<font></font>
????????pfc.AddMemoryFont(memPointer,?fontAsByte.Length);<font></font>
<font></font>
????????//Icon?font's?unicode?"0xe700"?is?converted?to?string?and?drawn?using?e.Graphics?with?WF?Fabric?set?as?font?family.?<font></font>
????????string?iconChar?=?char.ConvertFromUtf32(IconFont.LastArrow);<font></font>
????????Font?iconFont?=?new?Font(pfc.Families[0],?18.5f,?FontStyle.Bold);<font></font>
????????e.Graphics.DrawString(iconChar,?iconFont,?new?SolidB rush (Color.Orange),?new?PointF(10,?10));<font></font>
<font></font>
????????//Icon?font's?unicode?"0xe710"?is?converted?to?string?and?drawn?using?e.Graphics?with?WF?Fabric?set?as?font?family.<font></font>
????????iconChar?=?char.ConvertFromUtf32(IconFont.Plus);<font></font>
????????e.Graphics.DrawString(iconChar,?iconFont,?new?SolidB rush (Color.Red),?new?PointF(40,?40));<font></font>
<font></font>
????????//Icon?font's?unicode?"0xe720"?is?converted?to?string?and?drawn?using?e.Graphics?with?WF?Fabric?set?as?font?family.<font></font>
????????iconChar?=?char.ConvertFromUtf32(IconFont.Paint);<font></font>
????????e.Graphics.DrawString(iconChar,?iconFont,?new?SolidB rush (Color.Green),?new?PointF(70,?70));<font></font>
????}<font></font>
}<font></font>
<font></font>
public?static?class?IconFont<font></font>
{<font></font>
????//0xe700,?0xe710,?0xe720?-?are?icon?font's?unicode?from?the?WF?Fabric.ttf?file.<font></font>
????public?static?int?LastArrow?=?0xe700;<font></font>
????public?static?int?Plus?=?0xe710;<font></font>
????public?static?int?Paint?=?0xe720;<font></font>
}<font></font>
现在是在实际场景中应用图标字体的时候了。我们准备了 一个 简单的演示,它 显示 了在 自定义 按钮控件上绘制的第一页、最后一页、 上一页 和 下一页 的导航图标。
参考示例:使用图标字体在WinForms按钮控件上呈现图标
△ 自定义 按钮控制与图标字体和文本绘制在里面
使用图标字体的优点是:
改进了所有字体大小的渲染质量;
通过改变颜色为不同的 主题 和皮肤重用单个图标字体;
通过不必相对于DPI缩放维持不同的图像大小来减小应用程序大小;
添加 多个图标字体以及用字母、数字和符号连接图标字体。
小编说
以上是 为你收集整理的 在Essential Studio for WinForms应用程序中使用图标字体 全部内容。
如果觉得 网站内容还不错,欢迎将 推荐给好友。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail测试数据 举报,一经查实,本站将立刻删除。
Win11右键设计反人类?教你恢复Win11完整右键菜单方法
微软已经在10月5日发布了Windows 11正式版,很多朋友也已经升级了。不过对于Win11的一些新设计,并不是所有人都能适应的,例如新的右键快捷菜单,就不少朋友表示接受不了。
win11右键怎么设置原来的模样 win11右键菜单改回传统模式操作方法
今天小编就来为大家具体讲一讲win11右键菜单改回传统模式教程,需要的朋友一起看看。
win10右键新建卡顿2023解决方法
在使用我们的鼠标在桌面新建文件夹的时候,总是会出现一些卡顿延迟的情况,对于急性子来说,简直非常不友好没那么这个问题该怎么去解决呢,其实重装鼠标驱动或者使用命令代码都能解决。
win7升级win10会变流畅吗
在软件宣布对win7系统停止支持,将不会对win7系统有任何的更新和修复,大家在继续使用win7系统会有很大的风险,如果电脑支持我们升级win10系统运行起来也不会有卡顿的哦!
win7升级win10错误代码0x80072f8f-0x20000解决方法
win7系统目前微软已经不支持更新和修复出现的问题了,大家都在把win7升级为win10系统。其中出现错误代码0x80072f8f-0x20000该如何解决?这里帮助大家详细讲解一下解决方法,希望对大家有帮助!
win10右键显示设置打不开怎么办
有很的用户们在重装系统之后,或者不小心对系统文件进行了清理,导致在使用win10系统的时候,鼠标右键无法打开显示设置了,这时候只要先执行命令,再去服务中打开相关内容即可。
win7升级win10需要多少内存
win7在微软停止服务之后大家为了电脑更加安全,很多用户都选择升级为win10系统。在升级之前大家想了解一下win10系统需要多少内存才支持,这里详细讲解win10需要的电脑配置。
win11跳过联网激活方法
很多预装了win11的电脑在首次开机的时候会需要联网激活,但是激活后我们就无法验机确认了,这时候可以通过按下快捷键,再使用命令代码的方法来跳过联网激活。
win11跳过登录微软账户
由于win11开启需要用微软账户登录,而使用微软账户登录需要联网,但是不少朋友新机开机时又跳过了联网,这时候会出现无法进入系统的情况,其实我们只要随便输入一个不存在的账户就可以了。
Win10鼠标指针抖动怎么办?Win10鼠标指针抖动的解决方法
最近有不少小伙伴在使用Win10电脑的时候发现自己的鼠标指针会自动抖动,经常会在使用的时候跑偏掉,那么遇到这种情况要怎么办呢?下面就和小编一起来看看有什么解决方法吧。Win10鼠标指针抖动的解决方法1、首先检查一下是不是鼠标本身的原因,将鼠标插到别的电脑上试一下会不会出现鼠标光标乱跑的问题。依然出现...
查看更多关于在Essential Studio for WinForms应用程序中使用图标字体的详细内容...