zldfsz 发表于 2012-3-5 18:57:43

【已解决】求在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楼

afan 发表于 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

zldfsz 发表于 2012-3-5 20:00:07

回复 2# afan


    谢谢A大,原来是这样啊,搞定

tryhi 发表于 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       

tryhi 发表于 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

tryhi 发表于 2012-3-5 20:16:54

郁闷了,还以为我二三楼,发现原来我跑到四五楼了。。。。。

zldfsz 发表于 2012-3-5 20:41:46

对于楼主的结构感觉很奇怪,反而不是很理解楼主要干嘛
tryhi 发表于 2012-3-5 20:06 http://www.autoitx.com/images/common/back.gif

按个人理解写的,不知道应该是什么结构呢

zldfsz 发表于 2012-3-5 20:49:22

回复 5# tryhi

由于主循环要一直执行其它操作,所以个人喜欢OnEvent模式。。。
谢谢你写的消息模式

孙晓虎2011 发表于 2012-8-28 08:15:26

高手这么多呀。

非典男人 发表于 2013-4-27 10:02:58

非常感谢2# 5# 学习了.

lsb968 发表于 2013-8-12 19:50:46

要找的就是这个

mikezunya 发表于 2013-8-15 14:26:51

非常感谢大神们提供源码。

deaph 发表于 2014-12-3 16:03:15

消息模式
tryhi 发表于 2012-3-5 20:15 http://www.autoitx.com/images/common/back.gif


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

不懂这两种模式的区别,求教!
页: [1]
查看完整版本: 【已解决】求在GUI子窗口上点击按钮触发对应事件的例子