正文

GDI图形编程(9)

Windows移动游戏开发实战 作者:(美)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方法返回的尺寸并不总是精确的,有时返回的值比文本的实际尺寸稍微小些。这在文本的对齐方式上会造成一个问题,只要您确保尺寸足够大能够容纳下需要的文本即可(例如,可以利用该尺寸创建一个足够大的矩形结构,并将它传递给DrawString方法),所以建议您将返回的宽度和高度值按比例加大一点,确保文本实际能够适合该尺寸。

3.2.11  清除背景

最后一个方法是Clear,该方法很简单,它会将您绘制区域的内容全部擦除,并且用一种颜色进行填充,将颜色作为参数传入。其效果和使用FillRectangle来填充整个区域是一样的,但该方法用起来更简单,并且不需要创建Pen或者Brush对象。

3.2.12  绘图示例

本书配套下载代码中的示例项目3_2_GDIShapes展示了本章目前为止所介绍的各种不同的绘图函数(如图3-9所示),当程序启动后,会生成一个随机的图形。然后您可以选择使用哪种绘图方法在屏幕上显示图形,以及图形是否要被填充或者图形是否要有边界线(合适时)。要创建一个新图形,就使用New菜单选项。

注:以上内容图略,图片内容请参考原图书


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号