【转】VB6 GDI+ 入门教程(4)—— 文字绘制

前端之家收集整理的这篇文章主要介绍了【转】VB6 GDI+ 入门教程(4)—— 文字绘制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://vistaswx.blogbus.com/logs/37306364.html

1.GDI+中文字的必须要素

首先,与其它软件一样,GDI+中的文字也有格式。画文字有多种画法,但是无论如何,我们都需要创建一个FontFamily,这其中包含了字体类型的信息,包括字体名称、字体对齐方式(需要设置)等等。一般的画法然后还要从这个FontFamily创建一个Font,这个Font中包括字体样式(粗体、斜体)、字号等等,再后来我们调用一个函数文字用这个Font显示出来~;路径画法(可以显示边框画法)则不需要创建字体,直接调用函数,字体的样式包括函数里面了。

可见,GDI+中文字是需要一个FontFamily(一般是全局的),和一些Font(各种不同样式)以及文字组成的。

2.GDI+绘制文字

GDI+绘制文字有几种,下面将分别示例。

(1)标准画法:GdipDrawString

这是一般的画文字的办法,这种画法支持ClearTypeGridFit(还需要用语句再设置下),需要创建Font。

以下是主要绘图部分(窗体):

  1. Option Explicit
  2. Dim graphics As Long,Brush As Long
  3. Dim fontfam As Long,strformat As Long,curfont As Long,rclayout As RECTF
  4.  
  5. Private Sub Form_Load()
  6. InitGDIPlus
  7. GdipCreateFromHDC Me.hDC,graphics
  8.  
  9. GdipCreateFontFamilyFromName StrPtr("黑体"),fontfam
  10. GdipCreateStringFormat 0,strformat
  11. GdipCreateSolidFill &HFFFF0000,Brush
  12. GdipSetStringFormatAlign strformat,StringAlignmentNear
  13. GdipCreateFont fontfam,15,FontStyle.FontStyleItalic,UnitPixel,curfont
  14. GdipSetTextRenderingHint graphics,TextRenderingHintClearTypeGridFit
  15.  
  16. rclayout.Left = 100
  17. rclayout.Top = 100
  18. rclayout.Right = 150
  19. rclayout.Bottom = 150
  20.  
  21. GdipDrawString graphics,StrPtr("Hellow world! 这是我们第一个GDI+文字~!!"),-1,curfont,rclayout,strformat,Brush
  22. End Sub
  23.  
  24.  
  25. Private Sub Form_Unload(Cancel As Integer)
  26.  
  27. GdipDeleteFontFamily fontfam
  28.  
  29. GdipDeleteStringFormat strformat
  30.  
  31. GdipDeleteFont curfont
  32.  
  33. GdipDeleteBrush Brush
  34.  
  35. GdipDeleteGraphics graphics '释放graphics占用的内存
  36.  
  37.  
  38. TerminateGDIPlus
  39.  
  40. End Sub


可以看到这种画法思路是:

1.创建FontFamily (StrPtr:获取字符串指针,这样就能支持中文了!这就是不用TLB的原因……)

2.创建stringFormat(一般也可以不创),设置样式

3.创建Font。其中一定要注意单位问题。否则不要问我进去14输出的怎么不是14px大小文字……这里我们字体样式也巧妙了下,虽然声明中可以改写为As FontStyle但是不推荐。于是我们写就写FontStyle.xxx这样又可读性高,又不会出错。

4.创建Brush(显示文字咯)

5.设置文字区域(RcLayout)

6.绘制图形

7.扫地工作

这样 完美地画出了字。

注意:rectf中虽然是right,bottom但是实际上是width height,不要被误导哟。!


(2)路径画法:GdipAddPathString

这种画法一般用于绘制旋转文字、描边的文字等等。虽然可以设置graphics的圆滑设置,但是它画出来的文字依然不怎么清晰(相对于第一种来说)

窗体中:

  1. Option Explicit
  2.  
  3. Dim graphics As Long,Brush As Long,Pen As Long
  4. Dim fontFam As Long,strFormat As Long,strPath As Long,rclayout As RECTL
  5.  
  6. Private Sub Form_Load()
  7.  
  8. InitGDIPlus
  9. GdipCreateFromHDC Me.hDC,graphics
  10.  
  11. GdipSetSmoothingMode graphics,SmoothingModeAntiAlias
  12. GdipCreateFontFamilyFromName StrPtr("Verdana"),fontFam
  13. GdipCreateStringFormat 0,strFormat
  14. GdipSetStringFormatAlign strFormat,StringAlignmentNear
  15. GdipCreateSolidFill &HFFDEDEDE,Brush
  16. GdipCreatePen1 &HFF222222,2,Pen
  17. rclayout.Left = 10
  18. rclayout.Top = 10
  19. rclayout.Right = 200
  20. rclayout.Bottom = 150
  21.  
  22. GdipCreatePath FillModeAlternate,strPath
  23. GdipAddPathStringI strPath,StrPtr("描边 0123"),fontFam,FontStyle.FontStyleBold,55,strFormat
  24. GdipFillPath graphics,Brush,strPath
  25. GdipDrawPath graphics,Pen,strPath
  26. End Sub
  27.  
  28.  
  29. Private Sub Form_Unload(Cancel As Integer)
  30. GdipDeleteFontFamily fontFam
  31. GdipDeleteStringFormat strFormat
  32. GdipDeletePath strPath
  33. GdipDeleteBrush Brush
  34. GdipDeletePen Pen
  35. GdipDeleteGraphics graphics '释放graphics占用的内存
  36. TerminateGDIPlus
  37. End Sub


好 回来了 我们来比较一下这个画法有什么好处。

看出来了 它可以描边……恩 我不是在上面说了嘛 它还支持旋转、合并等等。

对了 我还说过“画出来不怎么清晰”,这里好像很好嘛!其实不然。如果你把描边去掉,单单FillPath,并且把字号减小 比如14,字体样式为普通,你就会发现不清晰了~!

它的过程是这样的:

1.首先前面部分和画普通文字一样 都需要创建FontFamily还有可选的创建字体对齐格式等等。

2.接下来路径画法不需要创建Font,我们需要创建(初始化)一个路径,否则可是什么都没有哦~

3.然后我们需要把文字增加到Path中去。

4.我们要FillPath填充这个路径 或者是DrawPath描出这个路径。如果是实心文字自然就是FillPath咯

5.最后别忘了释放Pen(如果有)和Brush(如果有) 以及最后一个Path。

(3)底层画法:GdipDrawDriverString

如名,底层画法。这种画法是最底层的绘制文字,底层到了……它不会自动转换字体(比如用Verdana绘制中文字体就不会显示出来) 由于不常使用,这里不贴画法了。

猜你在找的VB相关文章