找回密码
 加入
搜索
查看: 3097|回复: 6

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

  [复制链接]
发表于 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
请各位大大指正,谢谢
发表于 2011-9-24 13:33:07 | 显示全部楼层
沒有循環取消息
 楼主| 发表于 2011-9-24 13:50:07 | 显示全部楼层
本帖最后由 netbullking 于 2011-9-24 13:52 编辑
沒有循環取消息
rchockxm 发表于 2011-9-24 13:33


感谢您的回复。

但我是 事件模式,不是循环消息模式啊
发表于 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

评分

参与人数 1金钱 +10 收起 理由
netbullking + 10 谢谢帮忙

查看全部评分

发表于 2011-9-24 14:32:01 | 显示全部楼层
楼上正解哈。。不循环的话执行完了就退出啦。。
发表于 2011-9-24 14:47:34 | 显示全部楼层
执行完毕就退出这个现象还真没有注意到呢!!!呵呵!!!!
 楼主| 发表于 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[2]=["Maximize", "Minimize"]

        Switch $evtCode
                        Case $GUI_EVENT_MINIMIZE
                                Return $winStr & $evtNames[1]
                        Case $GUI_EVENT_MAXIMIZE
                                Return $winStr & $evtNames[0]
                        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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-6 09:44 , Processed in 0.114921 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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