netbullking 发表于 2011-9-24 12:49:16

[已解决] 创建的窗口一闪就关闭

本帖最后由 netbullking 于 2011-9-24 15:28 编辑

初学 AU3,做设置窗体图标练习。现在的问题是,窗体创建后立刻就关闭了。代码如下:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)

Global Const $icon = "iconFrm.ico"
Global Const $title="AU3 project - set up the test from icon"
Global Const $Gui_w = 320
Global Const $Gui_h = 180

_Main()

Func _Main()

        GUICreate($title, $Gui_w, $Gui_h, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
        GUISetIcon($icon, 0)
        GUISetState(@SW_MAXIMIZE)
        GUISetOnEvent($GUI_EVENT_CLOSE, "_exitApp")

EndFunc

Func _exitApp()

        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_MINIMIZE, $GUI_EVENT_MAXIMIZE
                        Return
        EndSwitch
EndFunc
请各位大大指正,谢谢

rchockxm 发表于 2011-9-24 13:33:07

沒有循環取消息

netbullking 发表于 2011-9-24 13:50:07

本帖最后由 netbullking 于 2011-9-24 13:52 编辑

沒有循環取消息
rchockxm 发表于 2011-9-24 13:33 http://www.autoitx.com/images/common/back.gif

感谢您的回复。

但我是 事件模式,不是循环消息模式啊

happytc 发表于 2011-9-24 14:11:00

回复 3# netbullking


    看到你提的这个问题,就想起了我初学au3时也有同样的困惑,于是很是亲切。
这里初学au3时很容易犯惑的地方之一,au3跟AHK或别的脚本有点不一样,得用循环等方式来使脚本不退出。你的脚本是因为脚本执行完了,就自动退出了。


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Opt("GUIOnEventMode", 1)

Global Const $icon = "iconFrm.ico"
Global Const $title = "AU3 project - set up the test from icon"
Global Const $Gui_w = 320
Global Const $Gui_h = 180

_Main()

Do
Until Sleep(10) * _IsPressed("1B")

Func _Main()
        GUICreate($title, $Gui_w, $Gui_h, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
        ;GUISetIcon($icon, 0)
        GUISetState(@SW_SHOW)
        GUISetOnEvent($GUI_EVENT_CLOSE, "_exitApp")
EndFunc   ;==>_Main

Func _exitApp()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_MINIMIZE, $GUI_EVENT_MAXIMIZE
                        Return
        EndSwitch
EndFunc   ;==>_exitApp

menfan1 发表于 2011-9-24 14:32:01

楼上正解哈。。不循环的话执行完了就退出啦。。

飞越星海 发表于 2011-9-24 14:47:34

执行完毕就退出这个现象还真没有注意到呢!!!呵呵!!!!

netbullking 发表于 2011-9-24 15:23:46

本帖最后由 netbullking 于 2011-9-24 15:37 编辑

回复 4# happytc

感谢 happytc 大大,受教了。

重新写过,和广大初学者共勉吧#Include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)

        Global Const $GUI_TITLE = "AutoIt project - set up the test from icon"

_Main()

Func _Main()

        Local $GUI_ICON_FULLNAME = "iconFrm.ico"
        Local $GUI_WIDTH = 480
        Local $GUI_HEIGHT = 180

        GUICreate($GUI_TITLE, $GUI_WIDTH, $GUI_HEIGHT, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
        GUISetIcon($GUI_ICON_FULLNAME, 0)
        GUISetState(@SW_SHOW)
        GUISetOnEvent($GUI_EVENT_CLOSE, "_exitApp")
        GUISetOnEvent($GUI_EVENT_MAXIMIZE, "_exitApp")
        GUISetOnEvent($GUI_EVENT_MINIMIZE, "_exitApp")

      ;必须有一个循环,以保证代码不退出
      ;对于简单窗体结构,可以在循环中处理消息,不必使用事件模式
        While 1
                Sleep(10)
        WEnd

EndFunc ;==> _Main

Func getEventName($evtCode)
        Local Const $winStr = " Window "
        Local $evtNames=["Maximize", "Minimize"]

        Switch $evtCode
                        Case $GUI_EVENT_MINIMIZE
                                Return $winStr & $evtNames
                        Case $GUI_EVENT_MAXIMIZE
                                Return $winStr & $evtNames
                        Case Else
                                Return $winStr
        EndSwitch
EndFunc;==> getEventName

Func _exitApp()

        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit (0)
                Case $GUI_EVENT_MINIMIZE, $GUI_EVENT_MAXIMIZE
                        MsgBox(64, $GUI_TITLE, "ID :" & @GUI_CtrlId & " is" &getEventName(@GUI_CtrlId) & " events")
        EndSwitch
EndFunc ;==> _exitApp
页: [1]
查看完整版本: [已解决] 创建的窗口一闪就关闭