版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://vistaswx.blogbus.com/logs/37306364.html
Option Explicit Dim graphics As Long,Brush As Long Dim fontfam As Long,strformat As Long,curfont As Long,rclayout As RECTF Private Sub Form_Load() InitGDIPlus GdipCreateFromHDC Me.hDC,graphics GdipCreateFontFamilyFromName StrPtr("黑体"),fontfam GdipCreateStringFormat 0,strformat GdipCreateSolidFill &HFFFF0000,Brush GdipSetStringFormatAlign strformat,StringAlignmentNear GdipCreateFont fontfam,15,FontStyle.FontStyleItalic,UnitPixel,curfont GdipSetTextRenderingHint graphics,TextRenderingHintClearTypeGridFit rclayout.Left = 100 rclayout.Top = 100 rclayout.Right = 150 rclayout.Bottom = 150 GdipDrawString graphics,StrPtr("Hellow world! 这是我们第一个GDI+文字~!!"),-1,curfont,rclayout,strformat,Brush End Sub Private Sub Form_Unload(Cancel As Integer) GdipDeleteFontFamily fontfam GdipDeleteStringFormat strformat GdipDeleteFont curfont GdipDeleteBrush Brush GdipDeleteGraphics graphics '释放graphics占用的内存 TerminateGDIPlus End Sub@H_403_6@
@H_403_6@ @H_403_6@ @H_403_6@可以看到这种画法思路是: @H_403_6@1.创建FontFamily (StrPtr:获取字符串指针,这样就能支持中文了!这就是不用TLB的原因……) @H_403_6@2.创建stringFormat(一般也可以不创),设置样式 @H_403_6@3.创建Font。其中一定要注意单位问题。否则不要问我进去14输出的怎么不是14px大小文字……这里我们字体样式也巧妙了下,虽然声明中可以改写为As FontStyle但是不推荐。于是我们写就写FontStyle.xxx这样又可读性高,又不会出错。 @H_403_6@4.创建Brush(显示文字咯) @H_403_6@5.设置文字区域(RcLayout) @H_403_6@6.绘制图形 @H_403_6@7.扫地工作 @H_403_6@ @H_403_6@这样 完美地画出了字。 @H_403_6@注意:rectf中虽然是right,bottom但是实际上是width height,不要被误导哟。! @H_403_6@
@H_403_6@(2)路径画法:GdipAddPathString @H_403_6@这种画法一般用于绘制旋转文字、描边的文字等等。虽然可以设置graphics的圆滑设置,但是它画出来的文字依然不怎么清晰(相对于第一种来说) @H_403_6@窗体中:
Option Explicit Dim graphics As Long,Brush As Long,Pen As Long Dim fontFam As Long,strFormat As Long,strPath As Long,rclayout As RECTL Private Sub Form_Load() InitGDIPlus GdipCreateFromHDC Me.hDC,graphics GdipSetSmoothingMode graphics,SmoothingModeAntiAlias GdipCreateFontFamilyFromName StrPtr("Verdana"),fontFam GdipCreateStringFormat 0,strFormat GdipSetStringFormatAlign strFormat,StringAlignmentNear GdipCreateSolidFill &HFFDEDEDE,Brush GdipCreatePen1 &HFF222222,2,Pen rclayout.Left = 10 rclayout.Top = 10 rclayout.Right = 200 rclayout.Bottom = 150 GdipCreatePath FillModeAlternate,strPath GdipAddPathStringI strPath,StrPtr("描边 0123"),fontFam,FontStyle.FontStyleBold,55,strFormat GdipFillPath graphics,Brush,strPath GdipDrawPath graphics,Pen,strPath End Sub Private Sub Form_Unload(Cancel As Integer) GdipDeleteFontFamily fontFam GdipDeleteStringFormat strFormat GdipDeletePath strPath GdipDeleteBrush Brush GdipDeletePen Pen GdipDeleteGraphics graphics '释放graphics占用的内存 TerminateGDIPlus End Sub@H_403_6@
@H_403_6@ @H_403_6@ @H_403_6@好 回来了 我们来比较一下这个画法有什么好处。 @H_403_6@看出来了 它可以描边……恩 我不是在上面说了嘛 它还支持旋转、合并等等。 @H_403_6@对了 我还说过“画出来不怎么清晰”,这里好像很好嘛!其实不然。如果你把描边去掉,单单FillPath,并且把字号减小 比如14,字体样式为普通,你就会发现不清晰了~! @H_403_6@它的过程是这样的: @H_403_6@1.首先前面部分和画普通文字一样 都需要创建FontFamily还有可选的创建字体对齐格式等等。 @H_403_6@2.接下来路径画法不需要创建Font,我们需要创建(初始化)一个路径,否则可是什么都没有哦~ @H_403_6@3.然后我们需要把文字增加到Path中去。 @H_403_6@4.我们要FillPath填充这个路径 或者是DrawPath描出这个路径。如果是实心文字自然就是FillPath咯 @H_403_6@5.最后别忘了释放Pen(如果有)和Brush(如果有) 以及最后一个Path。 @H_403_6@ @H_403_6@(3)底层画法:GdipDrawDriverString @H_403_6@如名,底层画法。这种画法是最底层的绘制文字,底层到了……它不会自动转换字体(比如用Verdana绘制中文字体就不会显示出来) 由于不常使用,这里不贴画法了。