正文

GDI圖形編程(8)

Windows移動游戲開發(fā)實戰(zhàn) 作者:(美)Adam Dawes


 

1. 使用不同的字體

到目前為止,我們看到的所有文本示例都使用的是窗體默認(rèn)的字體,但您可能會對要打印的文本進(jìn)行修改,修改其字體的類型、大小以及樣式。

這些例子全部將字體指定為this.Font,我們當(dāng)然可以使用一種其他的字體。然而,F(xiàn)ont對象的屬性全部是只讀的,所以必須在實例化字體對象時提供全部所需的信息。這些信息包括使用什么字體,字體的大小以及字體的樣式(粗體,斜體等)。

如果您知道想使用的字體的名稱,那么可以直接指定。不過,不同設(shè)備之間可用的字體會有所不同,即使是運行同一個版本的Windows Mobile系統(tǒng)。在將您的游戲發(fā)布給其他用戶時,可能也會發(fā)現(xiàn)您想要的字體不存在。這不會導(dǎo)致錯誤,但您指定的字體會恢復(fù)成系統(tǒng)Mobile默認(rèn)的字體。創(chuàng)建指定字體的代碼如下所示:

Font textFont = new Font("Tahoma", 12, FontStyle.Regular);

一種更可預(yù)測的指定字體的方法是使用FontFamily參數(shù),它可能的值為三種不同的字體類型:serif、sans-serif或者monospace。使用其中一種類型,GDI會嘗試為請求的類型找到最合適的字體。雖然還是不能保證這樣的字體一定存在,但如果有的話,您不需要知道該字體的名稱,就可以選擇該字體。通過FontFamily類來創(chuàng)建Font的代碼如下所示:

Font textFont = new Font(FontFamily.GenericSansSerif, 12, 

FontStyle.Regular);

本節(jié)中的兩個示例都還演示了如何設(shè)置字體的大?。辉诒纠?,字體大小為12點,點是一種與分辨率無關(guān)的量度,所以不管宿主手機屏幕的分辨率是多少,您的字體看上去大約都有相同的物理尺寸。

最后一個參數(shù)用于選擇字體的樣式。其值可以是Regular(不應(yīng)用任何樣式),或者是Bold、Italic、Underline及Strikeout的組合。這些標(biāo)志可以組合起來為字體創(chuàng)建復(fù)雜的樣式;例如,下面的代碼將創(chuàng)建一個粗體并且是斜體的字體。

Font textFont = new Font(FontFamily.GenericSansSerif, 12, FontStyle.Bold | 

FontStyle.Italic);

2. 使文本居中

當(dāng)在完整的桌面版.NET Framework中使用GDI處理文本時,StringFormat對象包含了各種類型的附加屬性,其中包括使文本在屏幕的某個位置上居中或者右對齊這個非常有用的功能。但是在.NET CF中沒有包含該功能,所以我們必須自己來實現(xiàn)它。幸運的是,實現(xiàn)這個功能并不是很難。我們可以使用Graphics對象中的MeasureString函數(shù)來獲取文本顯示在屏幕上時這些文本所占區(qū)域的寬度和高度。只要知道了文本的寬度,就可以很容易地將文本按照需要對齊了。

例如,我們想要讓一些文本在屏幕上居中顯示,可以首先將屏幕的寬度除以2,從而得到屏幕的中心點。然后減去這些文本的寬度的一半,那么結(jié)果就應(yīng)當(dāng)是文本的左半部分會顯示在屏幕的左半邊,右半部分顯示在屏幕的右半邊—— 也就是說,文本居中了(如圖3-8所示)。


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號