正文

GDI圖形編程(9)

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


 

程序清單3-7  使文本居中

private void MyForm_Paint(object sender, PaintEventArgs e)

{

int x;

SizeF textSize;

i int xAlignPoint;

// Create a brush for our text

using (SolidBrush textBrush = new SolidBrush(Color.Red))

{

// Create a font for our text

using (Font textFont = new Font(FontFamily.GenericSansSerif, 20, 

FontStyle.Regular))

{

// Measure the size of the text

textSize = e.Graphics.MeasureString("Hello world", textFont);

// Calculate the position on which we want the text to be centered.

// We will use the point halfway across the screen.

xAlignPoint = this.Width / 2;

// Determine the x position for the text

x = xAlignPoint - ((int)textSize.Width / 2);

// Draw the text at the resulting position

e.Graphics.DrawString("Hello world", textFont, textBrush, x, 0);

}

}

}

要使文本靠右對齊,只需要對計算x值的那行代碼進行修改,使它不再減去文本寬度的一半。

[...]

// Determine the x position for the text

x = xAlignPoint - (int)textSize.Width;

[...]

MeasureString方法還返回了文本的高度,所以要計算文本所占用的垂直空間也是很容易的。它也能處理換行,只要注意有換行時,MeasureString返回的還是整個字符串的尺寸,而不是單獨某一行的,想要將包含了換行的字符串也居中顯示的話,需要將該字符串分割為單獨的行,然后再對每一行的長度進行測量,這才能使所有的行都能居中顯示。

說到這里,還有一個值得注意的地方:MeasureString方法返回的尺寸并不總是精確的,有時返回的值比文本的實際尺寸稍微小些。這在文本的對齊方式上會造成一個問題,只要您確保尺寸足夠大能夠容納下需要的文本即可(例如,可以利用該尺寸創(chuàng)建一個足夠大的矩形結構,并將它傳遞給DrawString方法),所以建議您將返回的寬度和高度值按比例加大一點,確保文本實際能夠適合該尺寸。

3.2.11  清除背景

最后一個方法是Clear,該方法很簡單,它會將您繪制區(qū)域的內容全部擦除,并且用一種顏色進行填充,將顏色作為參數(shù)傳入。其效果和使用FillRectangle來填充整個區(qū)域是一樣的,但該方法用起來更簡單,并且不需要創(chuàng)建Pen或者Brush對象。

3.2.12  繪圖示例

本書配套下載代碼中的示例項目3_2_GDIShapes展示了本章目前為止所介紹的各種不同的繪圖函數(shù)(如圖3-9所示),當程序啟動后,會生成一個隨機的圖形。然后您可以選擇使用哪種繪圖方法在屏幕上顯示圖形,以及圖形是否要被填充或者圖形是否要有邊界線(合適時)。要創(chuàng)建一個新圖形,就使用New菜單選項。

注:以上內容圖略,圖片內容請參考原圖書


上一章目錄下一章

Copyright ? 讀書網 m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號