891108506 发表于 2024-3-6 16:40:22

【已解决】请教如何从单词处断行?才不会将一个单词断成两行,文本长度不定

本帖最后由 891108506 于 2024-3-6 23:34 编辑


这是坛友的代码

请教如何从单词处断行?才不会将一个单词断成两行,文本长度不定


#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>;内嵌GDI+的UDF,以供程序调用GDI+
Global $ghGDIPDll = 0
$Read = "公告内容:aaaa ssssdddddfffggg hhhh jjjjj kkkk zzzz xxxx cccc vvvv bbbb nnnn mmmm qqqqq wwww eeeeeerrrrr";公告内容
$path = @ScriptDir & "\公告内容.txt";设置变量
;$Read = FileRead($path,FileGetSize($path));从此前已打开的文本文件中读取指定数量的字符

Global Const $BMPCLSID = '{557CF400-1A04-11D3-9A73-0000F81EF32E}';指定BMP的图像编码器,测试N次为个值是固定的,所以直接用,大家也可以用_GDIPlus_EncodersGetCLSID('BMP')
Global Const $JPGCLSID = '{557CF401-1A04-11D3-9A73-0000F81EF32E}';同上
_GDIPlus_Startup();启动GDI+
$hImage = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\bg.jpg");从文件中创建一个位图对象
$w = _GDIPlus_ImageGetWidth($hImage);返回图像对象的宽度
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage);获取刚刚创建的位图对象的图形句柄
_GDIPlus_GraphicsSetSmoothingMode($hGraphic,2);设置图形的平滑度,使图形的图像有抗锯齿功能
DllCall($ghGDIPDll, "int", "GdipSetTextRenderingHint", "hwnd", $hGraphic , "int", 4);设置字体的平滑度,使图形的文字有抗锯齿功能,谢谢The886研究出来!
$hBrush = _GDIPlus_BrushCreateSolid(0xffffffff);创建实心画笔对象,其中Alpha通道值为255,RGB值为0xff00ff
$hFormat = _GDIPlus_StringFormatCreate();创建字符串格式对象
$hFamily = _GDIPlus_FontFamilyCreate("微软雅黑");创建字体为"微软雅黑"的字体族对象
$hFont = _GDIPlus_FontCreate($hFamily, 20, 1, 5);用上面创建的字体族创建一个字体大小为20,粗体+斜体,坐标参照为像素的字体对象,坐标参照很重要,会影响到字体在图形上的位置
$tLayout = _GDIPlus_RectFCreate(50, 45, 0, 0);创建 $tagGDIPRECTF 数据结构
$string = $Read;定义字符串

$aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $string, $hFont, $tLayout, $hFormat);根据上面创建的字体、字符串等信息测量字符串在图形中的尺寸,以便在图形中绘制
$Dwitdh = DllStructGetData($aInfo, "Width");获取上面创建的文本在图形中占用的宽度
ConsoleWrite($Dwitdh & @CRLF)
$xx = ($w - $Dwitdh)/2;文本居中后的X坐标
DllStructSetData($aInfo, "X", $xx);设置文本居中后的X坐标
;~ DllStructSetData($aInfo, "Y", $yy);设置文本居中后的Y坐标
_GDIPlus_GraphicsDrawStringEx($hGraphic, $string, $hFont, $aInfo, $hFormat, $hBrush);在图形中绘制上面创建的字符串对象
_GDIPlus_ImageSaveToFileEx($hImage, @ScriptDir & "\aa.bmp",$BMPCLSID,0);把位图对象保存为BMP文件
_GDIPlus_GraphicsDispose($hGraphic);释放资源
_WinAPI_DeleteObject($hImage);释放资源
_GDIPlus_Shutdown();关闭GDI+

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 545, 300, 192, 114)
$pic=GUICtrlCreatePic(@ScriptDir & "\aa.bmp",0,0,545,300)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

      EndSwitch
WEnd

这是代码出来的效果




这是我想要的效果








afan 发表于 2024-3-6 19:07:38

没 [ code ] 标签真是退步了…… 没办法说第几行了
改一下以下这里就行了
$tLayout = _GDIPlus_RectFCreate(50, 45, $w, 0);创建 $tagGDIPRECTF 数据结构

891108506 发表于 2024-3-6 23:30:38

afan 发表于 2024-3-6 19:07
没 [ code ] 标签真是退步了…… 没办法说第几行了
改一下以下这里就行了
$tLayout = _GDIPlus_RectFCreate ...

可以了,A大出手就是不一样:face (1):
页: [1]
查看完整版本: 【已解决】请教如何从单词处断行?才不会将一个单词断成两行,文本长度不定