程序清單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菜單選項。
注:以上內容圖略,圖片內容請參考原圖書