找回密码
 加入
搜索
查看: 13046|回复: 12

[GUI管理] 【已解决】求在GUI子窗口上点击按钮触发对应事件的例子

 火.. [复制链接]
发表于 2012-3-5 18:57:43 | 显示全部楼层 |阅读模式
本帖最后由 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楼

评分

参与人数 2金钱 +30 收起 理由
afan + 20 感谢主动将修改帖子分类为[已解决],请继续 ...
tryhi + 10

查看全部评分

发表于 2012-3-5 19:48:09 | 显示全部楼层
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金钱 +40 贡献 +2 收起 理由
zldfsz + 20 真是热心人
tryhi + 20 + 2

查看全部评分

 楼主| 发表于 2012-3-5 20:00:07 | 显示全部楼层
回复 2# afan


    谢谢A大,原来是这样啊,搞定
发表于 2012-3-5 20:06:21 | 显示全部楼层
本帖最后由 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        
发表于 2012-3-5 20:15:12 | 显示全部楼层
消息模式
#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

评分

参与人数 2金钱 +40 收起 理由
zldfsz + 20 谢谢你们的热血帮助
afan + 20

查看全部评分

发表于 2012-3-5 20:16:54 | 显示全部楼层
郁闷了,还以为我二三楼,发现原来我跑到四五楼了。。。。。
 楼主| 发表于 2012-3-5 20:41:46 | 显示全部楼层
对于楼主的结构感觉很奇怪,反而不是很理解楼主要干嘛
tryhi 发表于 2012-3-5 20:06


按个人理解写的,不知道应该是什么结构呢
 楼主| 发表于 2012-3-5 20:49:22 | 显示全部楼层
回复 5# tryhi

由于主循环要一直执行其它操作,所以个人喜欢OnEvent模式。。。
谢谢你写的消息模式
发表于 2012-8-28 08:15:26 | 显示全部楼层
高手这么多呀。
发表于 2013-4-27 10:02:58 | 显示全部楼层
非常感谢2# 5# 学习了.
发表于 2013-8-12 19:50:46 | 显示全部楼层
要找的就是这个

评分

参与人数 1金钱 +100 贡献 +1 收起 理由
afan + 100 + 1 举报奖励

查看全部评分

发表于 2013-8-15 14:26:51 | 显示全部楼层
非常感谢大神们提供源码。
发表于 2014-12-3 16:03:15 | 显示全部楼层
消息模式
tryhi 发表于 2012-3-5 20:15



    修改特殊的 GUI 函数的返回值类型.
0 = (默认) 当窗口被最小化,还原,最大化,改变大小,只通知
1 = 当窗口发生最小化,最大化,改变大小,就禁止这种事件并立即发出通知,等待自定义函数进行处理.

不懂这两种模式的区别,求教!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-18 11:58 , Processed in 0.097510 second(s), 31 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表