请高手指点GUI多窗体调用遇到的一些问题
我想实现的效果是:先弹出主窗口===》点击按钮时再弹出子窗口===》在子窗口输入数据
要求: 1.子窗口出现时父窗口不可作任何操作,直到子窗口被关闭
2.子窗口必须是由GUICREATE来创建的,不可以是MSGBOX 或 INPUTBOX.
3.关闭子窗口后,子窗口输入的数据要能被父窗口调用
以上请各路大侠指教,最好能附上详细的代码。。。感谢啦。。。。 au3写模态对话框 麻烦了点 要不要咱用delphi 把窗口封个dll给你调调 我不清楚什么才是“模态对话框”,但楼主的问题无非是“父子窗口”的操作吧。
论坛有很多帖子及示例的。出于鼓励新手,我还是敲一个简单示例吧。
代码里几乎没有注释,希望楼主已经接触GUI才是。Local $sInput
_gui_main()
Func _gui_main()
Local $hGui_main, $msg
Local $bt_child, $bt_input
$hGui_main = GUICreate('main gui', 300, 150)
$bt_child = GUICtrlCreateButton('子窗口', 50, 50)
$bt_input = GUICtrlCreateButton('信息', 180, 50)
GUISetState()
While True
$msg = GUIGetMsg()
Switch $msg
Case -3 ;点击了关闭窗体
GUIDelete($hGui_main)
ExitLoop
Case $bt_child
GUISetState(@SW_DISABLE, $hGui_main)
_gui_child()
GUISetState(@SW_ENABLE, $hGui_main)
WinActivate($hGui_main)
Case $bt_input
MsgBox(0, 'info from child', $sInput, 0, $hGui_main)
EndSwitch
WEnd
EndFunc
Func _gui_child()
Local $hGui_child, $msg
Local $bt_back, $input
$hGui_child = GUICreate('child gui', 300, 100)
$input = GUICtrlCreateInput('', 50, 25, 200, 17)
$bt_back = GUICtrlCreateButton('返回', 130, 60)
GUISetState()
Do
$msg = GUIGetMsg()
Until $msg = -3 Or $msg = $bt_back
$sInput = GUICtrlRead($input)
GUIDelete($hGui_child)
EndFunc au3父子窗口对话其实很简单,传递的变量设置好作用于或者通过func参数传递就可以,堪比傻瓜模式 回复 3# user3000
学习了! 回复 3# user3000
user3000 大侠,
你的方法我明白,
可否再指教一下,如果不使用GUISetState(@SW_DISABLE, $hGui_main)类似语句,直接调用子窗口,而不是通过改变窗口属性,来达到同样的目的呢?
顺便再请教一下:如何让子窗口只显示在父窗体内。 回复 6# freewaybsq
参考这个帖子吧:
http://61.153.183.105/forum.php?mod=viewthread&tid=31341&from=favorites 原理是我把GUISetState的两个参数搞反了{:face (52):},修改自 autoit入门与提高 父子窗口
Global Const $GUI_EVENT_CLOSE = -3;窗口关闭消息的值
Dim $Child_Gui;定义一个变量用于存放子窗口的句柄
Opt("GUIOnEventMode", 1) ;开启Event 模式
$Gui = GUICreate("我的第一个窗口") ; 创建一个居中显示的GUI 窗口
GUISetOnEvent($GUI_EVENT_CLOSE, "main");注册关闭消息到自定义函数main 里面进行处理
$Input = GUICtrlCreateInput("", 10, 35, 300, 20)
$Show_btn = GUICtrlCreateButton("子窗口", 40, 75, 90, 20)
GUICtrlSetOnEvent($Show_btn, "main")
GUISetState(@SW_SHOW)
$Child_Gui = 0
$Child_Input = 0
While 1 ;死循环,保证脚本不会退出
Sleep(1000)
WEnd
Func main()
Switch @GUI_CtrlId;根据宏@GUI_CtrlId来判断消息
Case $GUI_EVENT_CLOSE
Switch @GUI_WinHandle;根据宏@GUI_WinHandle 来判断产生关闭消息的窗口消息
Case $Gui
Exit
Case $Child_Gui
GUICtrlSetData($Input, GUICtrlRead($Child_Input))
GUIDelete($Child_Gui)
GUISetState(@SW_ENABLE,$Gui)
EndSwitch
Case $Show_btn
Child_Gui()
EndSwitch
EndFunc ;==>main
Func Child_Gui()
GUISetState(@SW_DISABLE,$Gui )
$Child_Gui = GUICreate("我是子窗口", 200, 100, -1, -1, -1, -1, $Gui)
$Child_Input = GUICtrlCreateInput("", 10, 35, 100, 20)
GUISetOnEvent($GUI_EVENT_CLOSE, "main")
GUISetState(@SW_SHOW)
EndFunc ;==>Child_Gui
页:
[1]