字体

FontFamily类

用FontFamily类的实例表示字体系列--一组基本设计类似、但在样式上有某些变化的字样。标准字体样式中的变化一般有黑体、斜体和黑斜体,如Arial字体系列包含4个字样:Arial Regular 、Arial Bold、Arial Italic、Arial Bold Italic。

创建FontFamily对象:

方法一:FontFamily ff = new FontFamily(“Arial”)

方法二:使用GenericFontFamily枚举的值(该枚举是System。Drawing。Text命名空间的一部分)FontFamily ff = new FontFamily(GenericFontFamily。Serif)

可以使用InstalledFontCollection对象来验证字体是否已安装。

创建好FontFamily对象后,就可以使用它定义某个Font对象,FontFamily ff = new FontFamily("Arial"); Font f = new Font(ff,12);另外,还可以直接定义字体Font f = new Font("Arial",12);

使用默认的Font对象时不需要创建该对象也不需要释放它,如:

Graphics g = e.Graphics;

g.DrawString("Hello world",this.Font,Brushes.Black,0,0);

格式化文本的最简单方式,也是最常用的方式是在创建Font对象时设置字体样式。字体样式有5个基本选项:Bold、Italic、Regular、Strikeout和Underline,可以使用布尔运算符OR或|把这些值组合在一起,获得样式的综合效果。

行、对齐和方向

GDI+可以使用单词自动换行功能来绘制对行文本,实现时只需调用DrawString方法,传送一个矩形,其宽度小于文本字符串的宽度,其高度则足以容纳多行文本:

Graphics g = e.Graphics;             g.FillRectangle(Brushes.White, this.ClientRectangle);             String s = "This string is long enough to wrap.";             s += "With a 200px - width rectangle,and a 12pt font.";             s += "it requires six lines to display the string in its entirety.";             Font f = new Font("Arial", 12);             Rectangle r = new Rectangle(20, 20, 200, f.Height * 6);             g.DrawRectangle(Pens.Black, r);             g.DrawString(s, f, Brushes.Black, r);             f.Dispose();

  在运行时控制行数可以使用MeasureString方法计算Size对象,该对象的长度反映了字符串的长度和宽度限制,然后使用该Size对象设置矩形的宽度和高度。,下面的例子在矩形中绘制一些文本,该矩形的宽度不大于150像素,但可根据需要容纳任意多行文本。

Graphics g = e.Graphics;             g.FillRectangle(Brushes.White, this.ClientRectangle);             String s = "This string is long enough to wrap.";             s += "With a 200px - width rectangle,and a 12pt font.";             s += "it requires six lines to display the string in its entirety.";             Font f = new Font("Arial", 12);             SizeF sf = g.MeasureString(s, f, 150);             RectangleF rf = new RectangleF(20, 20, sf.Width, sf.Height);             g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height);             g.DrawString(s, f, Brushes.Black, rf);

 

禁止文本自动换行

创建一个StringFormat对象,把FormatFlags属性设置为StringFormatFlags.NoWrap,并把StringFormat对象传送给DrawString方法,禁止文本自动换行。

Graphics g = e.Graphics;             g.FillRectangle(Brushes.White, this.ClientRectangle);             String s = "This string is long enough to wrap.";             Font f = new Font("Arial", 12);             Rectangle r = new Rectangle(20, 20, 150, f.Height * 4);             StringFormat sf = new StringFormat();             sf.FormatFlags = StringFormatFlags.NoWrap;             g.DrawRectangle(Pens.Black, r);             g.DrawString(s, f, Brushes.Black, r, sf);             f.Dispose();

 

默认情况下文本时左对齐,可以设置文本的水平和垂直居中,为此可以再次使用StringFormat对象的功能,这次把它的Alignment和LineAlignment属性设置为相应的值,并把该对象传送给DrawString方法。

StringFormat sf = new StringFormat();

sf.Alignment = StringAlignment.Center;

sf.LineAlignment = StringAlignment.Center;

绘制竖向文本有两个方法,一是定义一些横向文本,然后把坐标系空间旋转90°,二是创建一个StringFormat对象来绘制竖向文本(使用stringformat类构造函数的一个重载版本,给它传送一个directionvertical值)

Graphics g = e.Graphics;             g.FillRectangle(Brushes.White, this.ClientRectangle);             String s = "This string is long enough to wrap.";             StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical);             Font f = new Font("Times New Roman", 14);             SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf);             RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height);             g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height);             g.DrawString(s, f, Brushes.Black, rf, sf);             f.Dispose();

 

posted @ 2012-03-14 20:04  ttssrs  阅读(326)  评论(0编辑  收藏  举报