绘制文本 (GDI+)

你可以使用 Graphics 类的 DrawString 方法在指定位置或指定矩形内绘制文本。

在指定位置绘制文本

若要在指定位置绘制文本,需要 GraphicsFontFamilyFontPointFBrush 对象。

以下示例在位置 (30, 10) 绘制字符串“Hello”。 字体系列是 Times New Roman。 字体(字体系列的单个成员)是 Times New Roman,大小为 24 像素,常规样式。 假设图形是现有的 Graphics 对象。

FontFamily  fontFamily(L"Times New Roman");
Font        font(&fontFamily, 24, FontStyleRegular, UnitPixel);
PointF      pointF(30.0f, 10.0f);
SolidBrush  solidBrush(Color(255, 0, 0, 255));

graphics.DrawString(L"Hello", -1, &font, pointF, &solidBrush);

下图显示上述代码的输出。

screen shot of a small window containing the text

在前面的示例中,FontFamily 构造函数接收标识字体系列的字符串。 FontFamily 对象的地址作为第一个参数传递给 Font 构造函数。 传递给 Font 构造函数的第二个参数指定以第四个参数给出的单位测量的字体大小。 第三个参数指定字体的样式(常规、粗体、斜体等)。

DrawString 方法接收五个参数。 第一个参数是要绘制的字符串,第二个参数是该字符串的长度(以字符为单位,而不是字节)。 如果字符串以 null 结尾,则可以传递 –1 作为长度。 第三个参数是以前构造的 Font 对象的地址。 第四个参数是包含字符串左上角的坐标的 PointF 对象。 第五个参数是将用于填充字符串字符的 SolidBrush 对象的地址。

在矩形中绘制文本

Graphics 类的其中一种 DrawString 方法具有 RectF 参数。 通过调用 DrawString 方法,可以绘制包含在指定矩形中的文本。 若要在矩形中绘制文本,你需要 GraphicsFontFamilyFontRectFBrush 对象。

以下示例将创建一个左上角位于 (30, 10)、宽度为 100 且高度为 122 的矩形。 然后,此代码会在该矩形内绘制一个字符串。 该字符串被限制在矩形内并以不破坏单个单词的方式换行。

WCHAR string[] = 
   L"Draw text in a rectangle by passing a RectF to the DrawString method.";

FontFamily   fontFamily(L"Arial");
Font         font(&fontFamily, 12, FontStyleBold, UnitPoint);
RectF        rectF(30.0f, 10.0f, 100.0f, 122.0f);
SolidBrush   solidBrush(Color(255, 0, 0, 255));

graphics.DrawString(string, -1, &font, rectF, NULL, &solidBrush);

Pen pen(Color(255, 0, 0, 0));
graphics.DrawRectangle(&pen, rectF);

下图显示了在矩形中绘制的文本。

screen shot of a small window containing a recangle, within which appears the first part of a sentence

在上述示例中,传递给 DrawString 方法的第四个参数是一个指定文本边界矩形的 RectF 对象。 第五个参数是 StringFormat 类型 - 此参数为 NULL,因为不需要特殊字符串格式。