正文

GDI圖形編程(8)

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


 

1. 使用不同的字體

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

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

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

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

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

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

FontStyle.Regular);

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

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

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

FontStyle.Italic);

2. 使文本居中

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

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


上一章目錄下一章

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