【已解决】求在GUI子窗口上点击按钮触发对应事件的例子
本帖最后由 zldfsz 于 2012-3-5 20:07 编辑求个GUI子窗口上按钮事件的例子,看了些源码,还是没弄懂,特求个简单的例子,或者修改一下我的代码,让子窗口的按钮被点击后能执行相应函数
#include <GuiConstants.au3>
#include <ButtonConstants.au3>
Opt("GUIOnEventMode", 1);OnEvent模式
$ParentWin = GUICreate("父窗口", 350, 200,-1, -1)
$Button1 = GUICtrlCreateButton("弹出对话框", 62, 157-21, 100, 30)
$Button2 = GUICtrlCreateButton("弹出子窗口", 185, 157-21, 100, 30)
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "gui")
GUICtrlSetOnEvent($Button1, "gui")
GUICtrlSetOnEvent($Button2, "gui")
While 1
Sleep(100)
WEnd
Func gui()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox(0,"0","这仅仅是一个测试",5)
Case $Button2
Child()
EndSwitch
EndFunc
Func Child()
$ChildWin = GUICreate("子窗口", 340, 190,-1, -1,-1, -1, $ParentWin)
$Button3= GUICtrlCreateButton("执行test函数", 50, 140, 100, 30)
$Button4= GUICtrlCreateButton("关闭", 230, 140, 80, 30)
GUISetState(@SW_DISABLE, $ParentWin)
GUISwitch($ChildWin)
GUISetState(@SW_SHOW)
EndFunc
Func test()
MsgBox(0,"0","哈哈,该事件响应啦",5)
EndFunc
已解决,请看2楼 Opt('GUIOnEventMode', 1);OnEvent模式
$hParentWin = GUICreate('父窗口', 350, 200)
$Button1 = GUICtrlCreateButton('弹出对话框', 62, 157 - 21, 100, 30)
$Button2 = GUICtrlCreateButton('弹出子窗口', 185, 157 - 21, 100, 30)
GUISetOnEvent(-3, 'gui')
GUICtrlSetOnEvent($Button1, 'gui')
GUICtrlSetOnEvent($Button2, 'gui')
GUISetState(@SW_SHOW)
Global $hChildWin
While 1
Sleep(100)
WEnd
Func gui()
Switch @GUI_CtrlId
Case -3
Exit
Case $Button1
MsgBox(0, '0', '这仅仅是一个测试', 5)
Case $Button2
Child()
EndSwitch
EndFunc ;==>gui
Func Child()
$hChildWin = GUICreate('子窗口', 340, 190, -1, -1, -1, -1, $hParentWin)
GUISetOnEvent(-3, '_CloseChild')
GUICtrlCreateButton('执行test函数', 50, 140, 100, 30)
GUICtrlSetOnEvent(-1, 'test')
GUICtrlCreateButton('关闭', 230, 140, 80, 30)
GUICtrlSetOnEvent(-1, '_CloseChild')
GUISetState(@SW_DISABLE, $hParentWin)
GUISetState(@SW_SHOW, $hChildWin)
EndFunc ;==>Child
Func test()
MsgBox(0, '0', '哈哈,该事件相应啦', 5)
EndFunc ;==>test
Func _CloseChild()
GUISetState(@SW_ENABLE, $hParentWin)
GUIDelete($hChildWin)
GUISetState(@SW_SHOW, $hParentWin)
EndFunc ;==>_CloseChild
回复 2# afan
谢谢A大,原来是这样啊,搞定 本帖最后由 tryhi 于 2012-3-5 20:08 编辑
对于楼主的结构感觉很奇怪,反而不是很理解楼主要干嘛#include <GuiConstants.au3>
#include <ButtonConstants.au3>
Opt("GUIOnEventMode", 1);OnEvent模式
Global $ChildWin
$ParentWin = GUICreate("父窗口", 350, 200,-1, -1)
$Button1 = GUICtrlCreateButton("弹出对话框", 62, 157-21, 100, 30)
$Button2 = GUICtrlCreateButton("弹出子窗口", 185, 157-21, 100, 30)
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "gui")
GUICtrlSetOnEvent($Button1, "gui")
GUICtrlSetOnEvent($Button2, "gui")
While 1
Sleep(100)
WEnd
Func gui()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox(0,"0","这仅仅是一个测试",5)
Case $Button2
Child()
EndSwitch
EndFunc
Func Child()
$ChildWin = GUICreate("子窗口", 340, 190,-1, -1,-1, -1, $ParentWin)
GUISetOnEvent($GUI_EVENT_CLOSE, "gui")
$Button3= GUICtrlCreateButton("执行test函数", 50, 140, 100, 30)
GUICtrlSetOnEvent(-1, "test")
$Button4= GUICtrlCreateButton("关闭", 230, 140, 80, 30)
GUICtrlSetOnEvent(-1, "button4")
GUISetState(@SW_DISABLE, $ParentWin)
GUISwitch($ChildWin)
GUISetState(@SW_SHOW)
EndFunc
Func test()
MsgBox(0,"0","哈哈,该事件相应啦",5)
EndFunc
Func button4()
GUIDelete($ChildWin)
GUISetState(@SW_ENABLE , $ParentWin)
WinActivate($ParentWin)
EndFunc
消息模式
#include <GuiConstants.au3>
#include <ButtonConstants.au3>
Opt("GUIOnEventMode", 0);消息模式
Global $ChildWin,$Button3 = 3,$Button4 = 4
$ParentWin = GUICreate("父窗口", 350, 200,-1, -1)
$Button1 = GUICtrlCreateButton("弹出对话框", 62, 157-21, 100, 30)
$Button2 = GUICtrlCreateButton("弹出子窗口", 185, 157-21, 100, 30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox(0,"0","这仅仅是一个测试",5)
Case $Button2
Child()
Case $Button3
test()
Case $Button4
GUIDelete($ChildWin)
GUISetState(@SW_ENABLE , $ParentWin)
WinActivate($ParentWin)
EndSwitch
WEnd
Func Child()
$ChildWin = GUICreate("子窗口", 340, 190,-1, -1,-1, -1, $ParentWin)
$Button3= GUICtrlCreateButton("执行test函数", 50, 140, 100, 30)
$Button4= GUICtrlCreateButton("关闭", 230, 140, 80, 30)
GUISetState(@SW_DISABLE, $ParentWin)
GUISwitch($ChildWin)
GUISetState(@SW_SHOW)
EndFunc
Func test()
MsgBox(0,"0","哈哈,该事件相应啦",5)
EndFunc 郁闷了,还以为我二三楼,发现原来我跑到四五楼了。。。。。 对于楼主的结构感觉很奇怪,反而不是很理解楼主要干嘛
tryhi 发表于 2012-3-5 20:06 http://www.autoitx.com/images/common/back.gif
按个人理解写的,不知道应该是什么结构呢 回复 5# tryhi
由于主循环要一直执行其它操作,所以个人喜欢OnEvent模式。。。
谢谢你写的消息模式 高手这么多呀。 非常感谢2# 5# 学习了. 要找的就是这个 非常感谢大神们提供源码。 消息模式
tryhi 发表于 2012-3-5 20:15 http://www.autoitx.com/images/common/back.gif
修改特殊的 GUI 函数的返回值类型.
0 = (默认) 当窗口被最小化,还原,最大化,改变大小,只通知
1 = 当窗口发生最小化,最大化,改变大小,就禁止这种事件并立即发出通知,等待自定义函数进行处理.
不懂这两种模式的区别,求教!
页:
[1]