所需依赖库下载:
; 不完美,感觉edit里的字间距和gdip里的字间距有点出入【基本够用】 By doge_ahk1 ; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=4379 #NoEnv SetBatchLines -1 #SingleInstance force ; #Include <Gdip_All> pToken := Gdip_Startup(1) pg:=Gdip_GraphicsFromHDC(CreateCompatibleDC()) Gui, New Gui,Font,s12,微软雅黑 Gui, Add, Edit,x0 y0 vMyEdit gTextChange +Multi -VScroll -Wrap, Gui, Show, w300 h200, GUI 示例 return TextChange(){ global pg GuiControlGet, newText, , MyEdit size:=StrSplit(GetDispTextSize(RegExReplace(newText, "(\n)$","$1w"),"微软雅黑",16,pg), "|") GuiControl, Move, MyEdit,% "w" size[3] + 20 " h" size[4] +8 Gui, Show,% "w" size[3] + 20 " h" size[4] +8 return } ;██ 获取字符宽度 ██ 提取自BTT库 GetDispTextSize(Text, Font:="", FontSize:=12,pGraphics:="",FontS:="Regular",DPIScale1:=1){ static Styles := "Regular|Bold|Italic|BoldItalic|Underline|Strikeout" Style := 0 ; 设置字体样式,常规 粗体等 for eachStyle, valStyle in StrSplit(Styles, "|"){ if InStr(FontS, valStyle) Style |= (valStyle != "StrikeOut") ? (A_Index-1) : 8 } if !hFontFamily ; 加载已安装的字体 hFontFamily := Gdip_FontFamilyCreate(Font) if !hFontFamily ; 加载默认字体 hFontFamily := Gdip_FontFamilyCreateGeneric(1) ; 根据 DPI 缩放比例自动调整字号 hFont := Gdip_FontCreate(hFontFamily, FontSize * DPIScale1, Style, Unit:=0) if !hStringFormat hStringFormat := Gdip_StringFormatGetGeneric(0) CreateRectF(RC, 0, 0, "", "") returnRC := Gdip_MeasureString(pGraphics, Text, hFont, hStringFormat, RC) ; 计算大小 Gdip_DeleteFont(hFont) Gdip_DeleteStringFormat(hStringFormat) Gdip_DeleteFontFamily(hFontFamily) return returnRC }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)