所需依赖库下载:

Gdip.ahk库

 

; 不完美,感觉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
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。