9、返回新产生的变换矩阵
一旦你对一个给定的PictureBox控件产生了一个"世界坐标的转换",它可以通过Graphics::Transform属性返回一个矩阵对象,这个矩阵将用来倾斜文本。
Matrix* transform = g->Transform;
10、使用用户定义的值倾斜转换矩阵
矩阵对象有一个Shear方法,这个方法就可以来实现文本倾斜。它使用水平及垂直因子,这个例子中只使用了水平倾斜值,但是这两个值可以非常简单地进行定义。然而需要注意的是,这种平移技术只有在一个值为零时才能实现真正的倾斜。
transform->Shear(Convert::ToSingle(shearSize), 0);
11、将新得到的转换矩阵赋于图形对象的转换矩阵
一旦本地的矩阵经过Shear方法进行了修改,就需要将Graphic对象的transform设置为这个新值。
g->Transform = transform;
12、绘制文本
既然已经设置了PictureBox控件的绘制区域,最后就可以调用Graphics::DrawString方法来绘制文本了。
g->DrawString(textToDisplay, font, Brushes::Black, 0, 0);
四、绘制反射文本
首先,实现PictureBox 控件的Paint事件。注意,在实现这种显示效果时,它前面的5个步骤与上例中一样,读者朋友可以参考上例。
1、对PictureBox控件的平移矩阵进行平移
不久,你就需要测量Graphics对象,这样才能绘制反向的文本。然而,测量影响到了整个Graphics对象,不仅仅是需要绘制的文本,所以,你需要将Graphics对象重新定位到你希望显示文本的位置。
g->TranslateTransform(x, y);
2、计算显示文本的高度
你需要在最初文本的下面显示反射文本,虽然你通过Measurestring方法得到文本的高度,但这个高度包括空白高度,而我们需要的是纯字体的高度,下面的代码得到了纯文本的高度。
int lineAscent = font->FontFamily->GetCellAscent(font->Style);
int lineSpacing = font->FontFamily->GetLineSpacing(font->Style);
Single lineHeight = font->GetHeight(g);
Single cy = lineHeight * lineAscent / lineSpacing;
3、绘制最初的文本
注意XY的坐标值在(0,0)处,这是由于你前期调用TranslateTransform方法产生的结果。
g->DrawString(textToDisplay, font, Brushes::Black, 0, 0);
4、对graphic对象的transformation 矩阵使用必须的比例因子
为了反射文本,你需要使用ScaleTransform方法,在这个方法中使用-1,使文本按次序进行反射。
g->ScaleTransform(1, -1.0F);
5、绘制反射文本
一旦比例因子建立以后,你只要简单地绘制反射文本就可以了,注意Y值被设置为文本高度的-2倍,这样它才能显示在文本的下方。
g->DrawString(textToDisplay, font, Brushes::Gray, 0, -(cy*2));