展示了一个复杂的 GUI 实现,其中使用了多层嵌套的选项卡(Tab)控件,子窗口与控件被动态生成和管理,最终形成了一种类似于多页面叠加的用户界面结构。
; 多页面选项卡叠加的例子 By FeiYue
; 注意:Tab3不能叠加到其他页面
ids:=[]
Gui, +Hwndmain_id
Gui, Margin, 15, 15
;-- Tab3不能叠加到其他页面
Gui, Add, Tab3, w500 h300 AltSubmit, 1|2|3
Loop, 3 {
Gui, Tab, % i:=A_Index
Gui, Add, Edit, w200 Section Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 wp Hwndid gRun1, OK
ids.Push(id)
;-- 在页面中设置一个控件作为父窗口
Gui, Add, Text, xs Hwndid w415 h200
;----------------------------
;-- 根据父窗口的宽高生成一个只有Tab2控件的子窗口
GuiControlGet, p, Pos, %id%
Gui, New, +Hwndsub_id +Parent%id% -Caption +ToolWindow
Gui, Add, Tab2, x0 y0 w%pW% h%pH%, %i%-1|%i%-2|%i%-3
Gui, Margin, 15, 15
Loop, 3 {
Gui, Tab, % j:=A_Index
Gui, Add, Edit, w180 Section Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 wp Hwndid gRun1, OK
ids.Push(id)
;-- 在页面中设置一个控件作为父窗口
Gui, Add, Text, xs Hwndid w375 h100
;----------------------------
;-- 根据父窗口的宽高生成一个只有Tab2控件的子窗口
GuiControlGet, p, Pos, %id%
Gui, New, +Hwndsub_sub_id +Parent%id% -Caption +ToolWindow
Gui, Add, Tab2, x0 y0 w%pW% h%pH%, %i%-%j%-1|%i%-%j%-2|%i%-%j%-3
Gui, Margin, 15, 15
Loop, 3 {
Gui, Tab, % A_Index
Gui, Add, Edit, w150 Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 w150 Hwndid gRun1, OK
ids.Push(id)
}
Gui, Tab
Gui, Margin, 0, 0
;-- 设定边距为零后只显示Tab2控件的大小
Gui, Show, NA
;----------------------------
;-- 返回父窗口的默认GUI编号
Gui, %sub_id%: Default
}
Gui, Tab
Gui, Margin, 0, 0
;-- 设定边距为零后只显示Tab2控件的大小
Gui, Show, NA
;----------------------------
;-- 返回父窗口的默认GUI编号
Gui, %main_id%: Default
}
Gui, Tab
Gui, Show
;-------------------------
Menu, Tray, Add
Menu, Tray, Add, 显示窗口
Menu, Tray, Default, 显示窗口
Menu, Tray, Click, 1
return
显示窗口() {
Gui, 1:Show
}
随机数() {
Random, r
return r
}
;-- 使用函数的好处是可以得到控件的 Hwnd
;-- 函数中同样可以使用 A_GuiControl
Run1(hwnd, arg*) {
global ids
;-- 根据控件的 Hwnd 得到控件的序号
i:=0
For k,v in ids
if (v=hwnd)
i:=k
;-- 根据控件的序号得到目标控件的 hwnd
hwnd:=ids[i-1]
if !DllCall("IsWindow", "ptr",hwnd)
return
GuiControlGet, s,, %hwnd%
MsgBox, 4096,, %s%
}
F1:: 显示窗口()
F4::
IfWinExist, ahk_class Notepad
{
ControlSend,, ^s
Sleep, 500
}
Reload
return
; 多页面选项卡叠加的例子 By FeiYue
; 注意:Tab3不能叠加到其他页面
ids:=[]
Gui, +Hwndmain_id
Gui, Margin, 15, 15
;-- Tab3不能叠加到其他页面
Gui, Add, Tab3, w500 h300 AltSubmit, 1|2|3
Loop, 3 {
Gui, Tab, % i:=A_Index
Gui, Add, Edit, w200 Section Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 wp Hwndid gRun1, OK
ids.Push(id)
;-- 在页面中设置一个控件作为父窗口
Gui, Add, Text, xs Hwndid w415 h200
;----------------------------
;-- 根据父窗口的宽高生成一个只有Tab2控件的子窗口
GuiControlGet, p, Pos, %id%
Gui, New, +Hwndsub_id +Parent%id% -Caption +ToolWindow
Gui, Add, Tab2, x0 y0 w%pW% h%pH%, %i%-1|%i%-2|%i%-3
Gui, Margin, 15, 15
Loop, 3 {
Gui, Tab, % j:=A_Index
Gui, Add, Edit, w180 Section Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 wp Hwndid gRun1, OK
ids.Push(id)
;-- 在页面中设置一个控件作为父窗口
Gui, Add, Text, xs Hwndid w375 h100
;----------------------------
;-- 根据父窗口的宽高生成一个只有Tab2控件的子窗口
GuiControlGet, p, Pos, %id%
Gui, New, +Hwndsub_sub_id +Parent%id% -Caption +ToolWindow
Gui, Add, Tab2, x0 y0 w%pW% h%pH%, %i%-%j%-1|%i%-%j%-2|%i%-%j%-3
Gui, Margin, 15, 15
Loop, 3 {
Gui, Tab, % A_Index
Gui, Add, Edit, w150 Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 w150 Hwndid gRun1, OK
ids.Push(id)
}
Gui, Tab
Gui, Margin, 0, 0
;-- 设定边距为零后只显示Tab2控件的大小
Gui, Show, NA
;----------------------------
;-- 返回父窗口的默认GUI编号
Gui, %sub_id%: Default
}
Gui, Tab
Gui, Margin, 0, 0
;-- 设定边距为零后只显示Tab2控件的大小
Gui, Show, NA
;----------------------------
;-- 返回父窗口的默认GUI编号
Gui, %main_id%: Default
}
Gui, Tab
Gui, Show
;-------------------------
Menu, Tray, Add
Menu, Tray, Add, 显示窗口
Menu, Tray, Default, 显示窗口
Menu, Tray, Click, 1
return
显示窗口() {
Gui, 1:Show
}
随机数() {
Random, r
return r
}
;-- 使用函数的好处是可以得到控件的 Hwnd
;-- 函数中同样可以使用 A_GuiControl
Run1(hwnd, arg*) {
global ids
;-- 根据控件的 Hwnd 得到控件的序号
i:=0
For k,v in ids
if (v=hwnd)
i:=k
;-- 根据控件的序号得到目标控件的 hwnd
hwnd:=ids[i-1]
if !DllCall("IsWindow", "ptr",hwnd)
return
GuiControlGet, s,, %hwnd%
MsgBox, 4096,, %s%
}
F1:: 显示窗口()
F4::
IfWinExist, ahk_class Notepad
{
ControlSend,, ^s
Sleep, 500
}
Reload
return
; 多页面选项卡叠加的例子 By FeiYue
; 注意:Tab3不能叠加到其他页面
ids:=[]
Gui, +Hwndmain_id
Gui, Margin, 15, 15
;-- Tab3不能叠加到其他页面
Gui, Add, Tab3, w500 h300 AltSubmit, 1|2|3
Loop, 3 {
Gui, Tab, % i:=A_Index
Gui, Add, Edit, w200 Section Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 wp Hwndid gRun1, OK
ids.Push(id)
;-- 在页面中设置一个控件作为父窗口
Gui, Add, Text, xs Hwndid w415 h200
;----------------------------
;-- 根据父窗口的宽高生成一个只有Tab2控件的子窗口
GuiControlGet, p, Pos, %id%
Gui, New, +Hwndsub_id +Parent%id% -Caption +ToolWindow
Gui, Add, Tab2, x0 y0 w%pW% h%pH%, %i%-1|%i%-2|%i%-3
Gui, Margin, 15, 15
Loop, 3 {
Gui, Tab, % j:=A_Index
Gui, Add, Edit, w180 Section Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 wp Hwndid gRun1, OK
ids.Push(id)
;-- 在页面中设置一个控件作为父窗口
Gui, Add, Text, xs Hwndid w375 h100
;----------------------------
;-- 根据父窗口的宽高生成一个只有Tab2控件的子窗口
GuiControlGet, p, Pos, %id%
Gui, New, +Hwndsub_sub_id +Parent%id% -Caption +ToolWindow
Gui, Add, Tab2, x0 y0 w%pW% h%pH%, %i%-%j%-1|%i%-%j%-2|%i%-%j%-3
Gui, Margin, 15, 15
Loop, 3 {
Gui, Tab, % A_Index
Gui, Add, Edit, w150 Hwndid, % 随机数()
ids.Push(id)
Gui, Add, Button, x+15 w150 Hwndid gRun1, OK
ids.Push(id)
}
Gui, Tab
Gui, Margin, 0, 0
;-- 设定边距为零后只显示Tab2控件的大小
Gui, Show, NA
;----------------------------
;-- 返回父窗口的默认GUI编号
Gui, %sub_id%: Default
}
Gui, Tab
Gui, Margin, 0, 0
;-- 设定边距为零后只显示Tab2控件的大小
Gui, Show, NA
;----------------------------
;-- 返回父窗口的默认GUI编号
Gui, %main_id%: Default
}
Gui, Tab
Gui, Show
;-------------------------
Menu, Tray, Add
Menu, Tray, Add, 显示窗口
Menu, Tray, Default, 显示窗口
Menu, Tray, Click, 1
return
显示窗口() {
Gui, 1:Show
}
随机数() {
Random, r
return r
}
;-- 使用函数的好处是可以得到控件的 Hwnd
;-- 函数中同样可以使用 A_GuiControl
Run1(hwnd, arg*) {
global ids
;-- 根据控件的 Hwnd 得到控件的序号
i:=0
For k,v in ids
if (v=hwnd)
i:=k
;-- 根据控件的序号得到目标控件的 hwnd
hwnd:=ids[i-1]
if !DllCall("IsWindow", "ptr",hwnd)
return
GuiControlGet, s,, %hwnd%
MsgBox, 4096,, %s%
}
F1:: 显示窗口()
F4::
IfWinExist, ahk_class Notepad
{
ControlSend,, ^s
Sleep, 500
}
Reload
return
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)