12月182014
[教程]第十讲 GDI+文字,附发光字,阴影字
ACN论坛.讲师:seniors 转载请说明此文出处所在:<<简易工作室>>,谢谢!
GDI+之文字输出
本来这一讲想讲画笔,结果xms77问的文字颜色怎么设置,我回答错了,所以先讲文字
GDI+文字输出有二种方式
0、方式一 _GDIPlus_GraphicsDrawString方式
_GDIPlus_GraphicsDrawString这个函数里,没有参数设置画刷,其实是可以设置画刷的,只要修改一下
我改成了这样
Func _GraphicsDrawString($hGraphics, $sString, $nX, $nY, $hBrush = 0, $sFont = "Arial", $nSize = 10, $iFormat = 0) Local $hFormat = _GDIPlus_StringFormatCreate($iFormat) Local $hFamily = _GDIPlus_FontFamilyCreate($sFont) Local $hFont = _GDIPlus_FontCreate($hFamily, $nSize) Local $tLayout = _GDIPlus_RectFCreate($nX, $nY, 0, 0) Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat) __GDIPlus_BrushDefCreate($hBrush);本来这句是直接建立黑色画刷 Local $aResult = _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $aInfo[0], $hFormat, $hBrush) Local $iError = @error __GDIPlus_BrushDefDispose() _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) Return SetError($iError, 0, $aResult) EndFunc ;==>_GraphicsDrawString``` 这样输出文字就不要麻烦的设置字体等信息了
1、方式二 _GDIPlus_PathAddString方式
就是把字符串转换为路径,通过填充路径或者描边路径来写字
在3.3.7.15版中,描边路径和填充路径函数里直接建立了画笔和画刷,会造成对象没有删除现象,好像在新版本中已经改过来了
我把修改过的贴一下代码
Func _GraphicsDrawPath($hGraphics, $hPath, $hPen = 0) Local $iTmpErr, $iTmpExt, $aResult __GDIPlus_PenDefCreate($hPen);使用这种方法,默认是黑色,已经传递的是Pen句柄就不再建立 $aResult = DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGraphics, "hwnd", $hPen, "hwnd", $hPath) $iTmpErr = @error $iTmpExt = @extended __GDIPlus_PenDefDispose() If $iTmpErr Then Return SetError($iTmpErr, $iTmpExt, False) $GDIP_STATUS = $aResult[0] Return $aResult[0] = 0 EndFunc ;==>_GraphicsDrawPath Func _GraphicsFillPath($hGraphics, $hPath, $hBrush = 0) Local $iTmpErr, $iTmpExt, $aResult __GDIPlus_BrushDefCreate($hBrush);使用这种方法,默认是黑色,已经传递的是Brush句柄就不再建立 $aResult = DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGraphics, "hwnd", $hBrush, "hwnd", $hPath) $iTmpErr = @error $iTmpExt = @extended __GDIPlus_BrushDefDispose() If $iTmpErr Then Return SetError($iTmpErr, $iTmpExt, False) $GDIP_STATUS = $aResult[0] Return $aResult[0] = 0 EndFunc ;==>_GraphicsFillPath```
实例代码
源码较长:直接下载查看
本文固定链接: http://jianyiit.com/post-48.html
扫描二维码,在手机上阅读
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!