来自于微软
NET技术的C++托管扩展所包含的GDI+技术功能十分强大
本文将介绍如何使用GDI+的画刷来绘制文本
一使用画刷绘制文本的基本技术
本文所带的例子程序允许用户定义所要显示的文本字体尺寸显示文本所用的画刷(网格画刷或渐变画刷)以及绘制文本的颜色等例子代码下载GDIPlusTextWithBrusheszip
下面是GDI+中使用渐变画刷或网格画刷绘制文本的基本步骤
在控件的绘制(Paint)事件中添加一个事件处理函数
在这个处理函数中进行绘制文本的相关处理这样控件才能正确地进行重绘
获取一个图形(Graphics)对象
正如我们所熟悉的设备上下文一样图形对象是NET封装的一个绘制平面例如当在一个PictureBox控件上进行绘制时可以调用PictureBox::CreateGraphics方法来获取一个Graphics对象并在控件上绘图时使用这个图形(Graphics)对象互联网上有很多例子都是这么做的但是有一个问题是这样得到的Graphics对象不是永久对象如果用户从当前程序转到另一个应用程序并再次返回时这个控件将无法正确地进行重绘所以 要得当图形对象应当使用传递给控件Paint方法的PaintEventArgs对象中的Graphics对象代码如下所示
private: System::Void picText_Paint(System::Object * sender
System::Windows::Forms::PaintEventArgs * e)
{
Graphics* g = e>Graphics;
实例化一个字体对象
在字体类的个构造函数中最基本的一个构造函数只需要你提供字体名及字体的大小在下面的例子中创建了一个点Times New Roman类的常规字体
using namespace System::Drawing;
Font* font = new Font(STimes new Roman FontStyle::Regular);
测量将被绘制的文本尺寸
为了绘制文本需要使用Graphics::MeasureString方法来测量文本尺寸可以使用Graphics::MeasureString方法来完成这个任务这个方法需要提供被测量的文本及字体对象并返回SizeF结构对象这个结构包含了将要进行绘制文本的尺寸
SizeF textSize = g>MeasureString(SMy Sample Text font);
实例画刷对象
可以使用各种各样的画刷进行绘制文本包括网格画刷线性渐变画刷路径渐变画刷实体画刷及纹理画刷等只是在创建各个不同的实例画刷时传递的参数有一些小小的不同而已对各种画刷进行探讨不是本文的内容在本文的实例中只使用两种画刷(网格画刷及线性渐变画刷)
// HatchBrush example
Brush* brush = new HatchBrush(HatchStyle::Cross
Color::Black Color::Blue);
// LinearGradientBrush example
RectangleF* rect = __nogc new RectangleF(PointF( ) textSize);
brush= new LinearGradientBrush(*rect Color::Black Color::Blue
LinearGradientMode::ForwardDiagonal);
(选项)填充背景
为了使应用程序有特色可以在绘制文本前对背景进行颜色填充这有两个标准的方法较简单的方法是调用Graphics::Clear方法并定义将使用的颜色但是有时需要更高级的控制这时候需要使用Graphics::FillRectange方法
Graphics::FillRectange方法允许开发人员规定所选择的画刷对象并定义确切的矩形坐标位置关于画刷对象可以使用实例化的自定义画刷或者是系统画刷SystemBrushes系统画刷定义了若干属性成员它们是实心画刷各自用来表现窗口的不同的元素包括激活的边框及标题条等
// Use the Windowsdefined color for controls
// and explicitly state the rectangle coordinates
g>FillRectangle(SystemBrushes::Control picText>Left picText>Top
picText>Right picText>Left picText>Bottom picText>Top);
// Color the entire drawing surface using White
g>Clear(Color::White);
绘制文本
一旦将所有的GDI+对象实例化后下面所需要做的事就是调用Graphics::DrawString方法下面的例子使用了这个方法在这个方法里规定了需要显示的文本画刷和字体及显示文本的位置
// Center the text on the drawing surface
g>DrawString(txtToDisplay>Text font brush
(picText>Width textSizeWidth) /
(picText>Height textSizeHeight) / );