如何在AutoHotkey中获取GUI窗口尺寸并实现Edit控件自动适配?
如何让AutoHotkey 2.0的Edit控件随GUI窗口自动调整大小?
我正在尝试制作一个内嵌Edit控件的GUI窗口,希望该控件能自动调整大小以适配GUI窗口。请问如何获取GUI窗口的当前尺寸?
以下是我的代码:
#Requires AutoHotkey 2.0 ResizeWindow(*) { EditBox.Opt("w" TextBoxGUI.Width " h" TextBoxGUI.Height) ; 这里存在问题 } TextBoxGUI := Gui("+Resize", "TextBox GUI") TextBoxGUI.OnEvent("Size", ResizeWindow) TextBoxGUI.SetFont("s15 Norm", "Lexend") EditBox := TextBoxGUI.Add("Edit", "x0 y0 w500 h600") TextBoxGUI.Show("w500 h600")
问题分析与解决方案
你的代码存在两个核心问题:
- 错误的尺寸获取方式:
TextBoxGUI.Width和TextBoxGUI.Height包含了窗口标题栏、边框等非客户区域的尺寸,并非Edit控件可填充的实际区域。 - 控件调整方法错误:
Opt方法的参数拼接格式有误,且该方法更适合修改控件样式,调整尺寸推荐使用更直观的Move方法。
修正后的完整代码
#Requires AutoHotkey 2.0 ResizeWindow(*) { ; 使用ClientWidth/ClientHeight获取客户区实际尺寸,调整Edit控件占满整个区域 EditBox.Move(0, 0, TextBoxGUI.ClientWidth, TextBoxGUI.ClientHeight) } TextBoxGUI := Gui("+Resize", "TextBox GUI") TextBoxGUI.OnEvent("Size", ResizeWindow) TextBoxGUI.SetFont("s15 Norm", "Lexend") ; 初始添加控件时无需指定固定尺寸,窗口显示后会自动触发Size事件调整 EditBox := TextBoxGUI.Add("Edit", "x0 y0") TextBoxGUI.Show("w500 h600")
关键说明
TextBoxGUI.ClientWidth/TextBoxGUI.ClientHeight:专门获取GUI窗口内部客户区域的宽高,这是Edit控件可以填充的有效区域,完全排除了窗口边框、标题栏的占用。EditBox.Move(0, 0, w, h):直接设置控件的位置(x=0,y=0)和尺寸,确保控件始终填满整个客户区。- 初始添加Edit控件时无需固定宽高,窗口
Show后会自动触发Size事件,调用ResizeWindow函数完成适配。
内容的提问来源于stack exchange,提问作者Speedy
相关产品推荐
相关产品推荐

