程序清單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);
}
}
}
要使文本靠右對(duì)齊,只需要對(duì)計(jì)算x值的那行代碼進(jìn)行修改,使它不再減去文本寬度的一半。
[...]
// Determine the x position for the text
x = xAlignPoint - (int)textSize.Width;
[...]
MeasureString方法還返回了文本的高度,所以要計(jì)算文本所占用的垂直空間也是很容易的。它也能處理?yè)Q行,只要注意有換行時(shí),MeasureString返回的還是整個(gè)字符串的尺寸,而不是單獨(dú)某一行的,想要將包含了換行的字符串也居中顯示的話,需要將該字符串分割為單獨(dú)的行,然后再對(duì)每一行的長(zhǎng)度進(jìn)行測(cè)量,這才能使所有的行都能居中顯示。
說(shuō)到這里,還有一個(gè)值得注意的地方:MeasureString方法返回的尺寸并不總是精確的,有時(shí)返回的值比文本的實(shí)際尺寸稍微小些。這在文本的對(duì)齊方式上會(huì)造成一個(gè)問(wèn)題,只要您確保尺寸足夠大能夠容納下需要的文本即可(例如,可以利用該尺寸創(chuàng)建一個(gè)足夠大的矩形結(jié)構(gòu),并將它傳遞給DrawString方法),所以建議您將返回的寬度和高度值按比例加大一點(diǎn),確保文本實(shí)際能夠適合該尺寸。
3.2.11 清除背景
最后一個(gè)方法是Clear,該方法很簡(jiǎn)單,它會(huì)將您繪制區(qū)域的內(nèi)容全部擦除,并且用一種顏色進(jìn)行填充,將顏色作為參數(shù)傳入。其效果和使用FillRectangle來(lái)填充整個(gè)區(qū)域是一樣的,但該方法用起來(lái)更簡(jiǎn)單,并且不需要?jiǎng)?chuàng)建Pen或者Brush對(duì)象。
3.2.12 繪圖示例
本書配套下載代碼中的示例項(xiàng)目3_2_GDIShapes展示了本章目前為止所介紹的各種不同的繪圖函數(shù)(如圖3-9所示),當(dāng)程序啟動(dòng)后,會(huì)生成一個(gè)隨機(jī)的圖形。然后您可以選擇使用哪種繪圖方法在屏幕上顯示圖形,以及圖形是否要被填充或者圖形是否要有邊界線(合適時(shí))。要?jiǎng)?chuàng)建一個(gè)新圖形,就使用New菜單選項(xiàng)。
注:以上內(nèi)容圖略,圖片內(nèi)容請(qǐng)參考原圖書