找回密码
 加入
搜索
楼主: ac5474012

[GUI管理] GUI的问题,两个窗口关闭一个不关闭另一个

 火.. [复制链接]
发表于 2011-3-22 17:49:18 | 显示全部楼层
你修改过的代码,我点取消和X,主窗体都在,不知你那里为什么有这样的问题,还是请高手解答吧
发表于 2011-3-22 21:51:37 | 显示全部楼层
本帖最后由 lixiaolong 于 2011-3-22 21:57 编辑

回复 15# ac5474012

你的代码稍微改一下就可以了.

先把Func mimaK($mimaLJ)里面的Return ('0')去掉.

Case $GUI_EVENT_CLOSE
          Exit
改为
Case $GUI_EVENT_CLOSE
          GUIDelete($Form2)
          ExitLoop
另外,Return ('0')这个写法不对吧,应该是Return (0) Return (1)
发表于 2011-3-22 22:00:22 | 显示全部楼层
你这个涉及子父窗口问题,搜索一下论坛看看人家怎么写,慢慢的自己就会了。
刚好前久我也学习GUIOnEventMode模式,写的一个小例子个你参考。
别人给你代码也许你什么也学不到,自己实践成功才是最大的快乐。

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Dim $B1, $F1, $F2
Opt("GUIOnEventMode", 1)
father()
Func father()
        $F1 = GUICreate("father", 608, 456, 192, 124)
        GUISetOnEvent($GUI_EVENT_CLOSE, "gui")
        GUISetBkColor(0x335EA8)
        $B1 = GUICtrlCreateButton("son", 472, 384, 105, 41)
        GUICtrlSetOnEvent($B1, "gui")
        GUISetState(@SW_SHOW)
EndFunc   ;==>father

Func son()
        $F2 = GUICreate("son", 413, 298, 193, 123)
        GUISetOnEvent($GUI_EVENT_CLOSE, "gui")
        GUISetBkColor(0x800080)
        GUISetState(@SW_SHOW)

EndFunc   ;==>son
While 1
        ;
WEnd
Func gui()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Switch @GUI_WinHandle
                                Case $F1
                                        Exit
                                Case $F2
                                        GUISetState(@SW_HIDE, $F2)
                                        GUISetState(@SW_ENABLE, $F1)
                                        WinActivate("father")
                        EndSwitch
                Case $B1
                        GUISetState(@SW_DISABLE, $F1)
                        son()
        EndSwitch
EndFunc   ;==>gui
发表于 2011-3-22 22:03:38 | 显示全部楼层
我不是在群里说了吗 高级模式
发表于 2011-3-22 22:21:32 | 显示全部楼层
是啊,楼上说得对
修改为以下就没问题了。
        While 1
                ;Return ('0')
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                                ;Exit
                                GUISetState(@SW_ENABLE, $Form1_1)
                                GUIDelete($Form2)
                                ExitLoop
                        Case $ButtonOk

                                $zhanghaoZ = GUICtrlRead($zhanghaoSR)
                                $mimaZ = GUICtrlRead($mimaSR)
                                If $zhanghaoZ = "" Then
                                        MsgBox(0, "", "请输入您的账号")
                                Else
                                        $m = mima($zhanghaoZ, $mimaZ, $mimaLJ)
                                        If $m = 1 Then
                                                Return ('1')
                                                ExitLoop
                                        EndIf
                                        If $m = 2 Then MsgBox(0, "", "你的账号错误")
                                        If $m = 3 Then MsgBox(0, "", "你的密码错误")
                                        If $m = 0 Then MsgBox(0, "", "意外错误")
                                EndIf
                        Case $ButtonCancel

                EndSwitch
        WEnd
EndFunc   ;==>mimaK
发表于 2011-3-22 22:25:15 | 显示全部楼层
还有,看代码貌似个"大工程"
可惜细看代码,发现有"拼起来"的感觉。
基础知识和逻辑思维很重要。
发表于 2011-3-23 00:28:22 | 显示全部楼层
#include <GUIConstantsEx.au3>
_Main()

Func _Main()

        Local $GUIWidth = 250, $GUIHeight = 250
        Local $ParentWin, $ParentWin_Pos, $ChildWin, $msg

        $ParentWin = GUICreate("父窗体", $GUIWidth, $GUIHeight)
        $ParentWin_Pos = WinGetPos($ParentWin, "")
        GUISetState(@SW_SHOW)

        $ChildWin = GUICreate("子窗体", $GUIWidth, $GUIHeight, $ParentWin_Pos[0] + 100, $ParentWin_Pos[1] + 100, -1, -1, $ParentWin)
        GUISetState(@SW_SHOW)

        GUISwitch($ParentWin)
        While 1
                $msg = GUIGetMsg(1)
                Select
                        Case $msg[0] = $GUI_EVENT_CLOSE
                                If $msg[1] = $ChildWin Then
                                        MsgBox(64, "测试", "隐藏子窗体.")
                                        GUISwitch($ChildWin)
                                        GUISetState(@SW_HIDE)
                                ElseIf $msg[1] = $ParentWin Then
                                        MsgBox(64, "测试", "隐藏父窗体.")
                                        GUISwitch($ParentWin)
                                        GUISetState(@SW_HIDE)
                                EndIf
                EndSelect
        WEnd
EndFunc   ;==>_Main
发表于 2011-3-23 10:38:52 | 显示全部楼层
帮助里看看$msg=guigetmsg(1)的意思
netegg 发表于 2011-3-22 17:08



    学习了.....
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-12 06:48 , Processed in 0.070841 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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