溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在Essential Studio for WinForms應(yīng)用程序中使用圖標(biāo)字體

發(fā)布時(shí)間:2020-09-28 10:25:33 來源:網(wǎng)絡(luò) 閱讀:289 作者:qq5d2d9e539cdbb 欄目:軟件技術(shù)

圖標(biāo)字體包含符號(hào)而不是數(shù)字和字母。在Web技術(shù)中,與其他圖像格式相比,圖標(biāo)字體占主導(dǎo)地位。由于它們是矢量圖形,體積小、易于裝載,因此用戶可以在不降低質(zhì)量的情況下上下縮放。但唯一的限制就是單個(gè)圖標(biāo)只能用一種顏色繪制。

相信每一位小伙伴都會(huì)經(jīng)常都有這樣的疑問:可以在桌面應(yīng)用程序Essential Studio for Windows Forms中使用圖標(biāo)字體嗎?答案是肯定的!本文就為你講解具體的操作方法。

首先,請(qǐng)記住,在DPI的情況下,我們只需要改變字體大小,不需要為不同的DPI縮放維護(hù)不同大小的圖像。

如何添加和繪制圖標(biāo)字體

系統(tǒng)中通??捎玫淖煮w(如Arial、Times New Roman)可能沒有我們需要在應(yīng)用程序中使用的圖標(biāo),但有許多支持創(chuàng)建圖標(biāo)字體的在線和離線應(yīng)用程序。Syncfusion就免費(fèi)提供了一個(gè)名為Metro Studio的離線工具。

為了演示,我們創(chuàng)建了一個(gè).ttf文件,其中包含一個(gè)名為“WF Fabric”的字體系列。結(jié)果圖標(biāo)如下圖所示。

在Essential Studio for WinForms應(yīng)用程序中使用圖標(biāo)字體

△ 來自WF Fabric.ttf文件的圖標(biāo)字體

*注意:上圖中顯示的Unicode(e700,e701等)表示在應(yīng)用程序中繪制時(shí)的相應(yīng)字形。

在WinForms應(yīng)用程序中包含WF Fabric.ttf文件,并在屬性對(duì)話框中將其Build Action標(biāo)記為Embedded Resource。

在Essential Studio for WinForms應(yīng)用程序中使用圖標(biāo)字體

△ WF Fabric.ttf文件標(biāo)記為嵌入式資源

在表單初始化期間,包括在系統(tǒng)內(nèi)存中注冊(cè)圖標(biāo)字體的代碼。與其他字體(Arial、Times New Roman等)一樣,WF Fabric也將在控制面板\所有控制面板項(xiàng)\字體的系統(tǒng)內(nèi)存中注冊(cè)。

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?system?memory.<font></font>
????Stream?fontAsStream?=?this.GetType().Assembly.GetManifestResourceStream("WindowsFormsApp1.WF?Fabric.ttf");<font></font>
????byte[]?fontAsByte?=?new?byte[fontAsStream.Length];<font></font>
????fontAsStream.Read(fontAsByte,?0,?(int)fontAsStream.Length);<font></font>
????fontAsStream.Close();<font></font>
????IntPtr?memPointer?=?System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(typeof(byte))?*?fontAsByte.Length);<font></font>
????System.Runtime.InteropServices.Marshal.Copy(fontAsByte,?0,?memPointer,?fontAsByte.Length);<font></font>
????pfc.AddMemoryFont(memPointer,?fontAsByte.Length);<font></font>
}<font></font>

著至關(guān)重要的作用。pfc對(duì)象中的Families屬性將保存已保存的字體系列名稱。如上所述,我們創(chuàng)建了WF Fabric.ttf,其字體系列名稱為WF Fabric。下載Essential Studio for Windows Forms最新版

現(xiàn)在創(chuàng)建一個(gè)枚舉,其中包含具有相應(yīng)名稱的所有圖標(biāo)字體,并為其Unicode指定前綴0x。因此,無論您使用圖標(biāo)字體繪制何處,Unicode都將轉(zhuǎn)換為字符串并作為參數(shù)傳遞給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?system?memory.<font></font>
????????Stream?fontAsStream?=?this.GetType().Assembly.GetManifestResourceStream("WindowsFormsApp1.WF?Fabric.ttf");<font></font>
????????byte[]?fontAsByte?=?new?byte[fontAsStream.Length];<font></font>
????????fontAsStream.Read(fontAsByte,?0,?(int)fontAsStream.Length);<font></font>
????????fontAsStream.Close();<font></font>
????????IntPtr?memPointer?=?System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(typeof(byte))?*?fontAsByte.Length);<font></font>
????????System.Runtime.InteropServices.Marshal.Copy(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?SolidBrush(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?SolidBrush(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?SolidBrush(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>

現(xiàn)在是在實(shí)際場(chǎng)景中應(yīng)用圖標(biāo)字體的時(shí)候了。我們準(zhǔn)備了一個(gè)簡(jiǎn)單的演示,它顯示了在自定義按鈕控件上繪制的第一頁、最后一頁、上一頁和下一頁的導(dǎo)航圖標(biāo)。

參考示例:使用圖標(biāo)字體在WinForms按鈕控件上呈現(xiàn)圖標(biāo)

在Essential Studio for WinForms應(yīng)用程序中使用圖標(biāo)字體

△ 自定義按鈕控制與圖標(biāo)字體和文本繪制在里面

使用圖標(biāo)字體的優(yōu)點(diǎn)是:

  • 改進(jìn)了所有字體大小的渲染質(zhì)量;

  • 通過改變顏色為不同的主題和皮膚重用單個(gè)圖標(biāo)字體;

  • 通過不必相對(duì)于DPI縮放維持不同的圖像大小來減小應(yīng)用程序大??;

  • 添加多個(gè)圖標(biāo)字體以及用字母、數(shù)字和符號(hào)連接圖標(biāo)字體。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI