离我远点 发表于 2009-3-2 16:49:01

关闭GUI后,如何返回托盘菜单而不是退出程序?

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1)    ; Default tray menu items (Script Paused/Exit) will not be shown.

$settingsitem    = TrayCreateMenu("设置")
$displayitem    = TrayCreateItem("显示", $settingsitem)
$printeritem    = TrayCreateItem("打印", $settingsitem)
TrayCreateItem("")
$aboutitem      = TrayCreateItem("关于")
TrayCreateItem("")
$exititem      = TrayCreateItem("退出")

TraySetState()

While 1
    $msg = TrayGetMsg()
    Select
      Case $msg = 0
            ContinueLoop
      Case $msg = $aboutitem
            #include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1_1 = GUICreate("", 274, 115, -1, -1, BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS))
GUISetIcon("D:\123\456.exe")
$Group1 = GUICtrlCreateGroup("关于", 7, 2, 263, 101)
$Label1 = GUICtrlCreateLabel("小软件", 94, 14, 88, 17)
$Label2 = GUICtrlCreateLabel("软件由我出品", 83, 47, 112, 16)
GUICtrlSetFont(-1, 9, 400, 0, "新宋体")
GUICtrlSetColor(-1, 0x0000FF)
$Label3 = GUICtrlCreateLabel("我的作品", 167, 83, 100, 16)
GUICtrlSetFont(-1, 9, 400, 0, "新宋体")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

      Case $msg = $exititem
            ExitLoop
    EndSelect
WEnd

Exit

上面是我的代码,我选择关于之后,弹出一个窗口,当我关闭这个窗口的时候,整个程序都退出了,请教一下,如何修改可以点击关闭按钮后关闭窗口,而不退出主程序呢?

[ 本帖最后由 离我远点 于 2009-3-2 22:52 编辑 ]

离我远点 发表于 2009-3-2 17:53:00

我把程序代码改成:
#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1)    ; Default tray menu items (Script Paused/Exit) will not be shown.

$settingsitem    = TrayCreateMenu("设置")
$displayitem    = TrayCreateItem("显示", $settingsitem)
$printeritem    = TrayCreateItem("打印", $settingsitem)
TrayCreateItem("")
$aboutitem      = TrayCreateItem("关于")
TrayCreateItem("")
$exititem      = TrayCreateItem("退出")

TraySetState()

While 1
    $msg = TrayGetMsg()
    Select
      Case $msg = 0
            ContinueLoop
      Case $msg = $aboutitem
            #include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1_1 = GUICreate("", 274, 115, -1, -1, BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS))
GUISetIcon("D:\123\456.exe")
$Group1 = GUICtrlCreateGroup("关于", 7, 2, 263, 101)
$Label1 = GUICtrlCreateLabel("小软件", 94, 14, 88, 17)
$Label2 = GUICtrlCreateLabel("软件由我出品", 83, 47, 112, 16)
GUICtrlSetFont(-1, 9, 400, 0, "新宋体")
GUICtrlSetColor(-1, 0x0000FF)
$Label3 = GUICtrlCreateLabel("我的作品", 167, 83, 100, 16)
GUICtrlSetFont(-1, 9, 400, 0, "新宋体")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        GUIDelete($Form1_1)
        EndSwitch
WEnd

      Case $msg = $exititem
            ExitLoop
    EndSelect
WEnd

Exit

之后可以返回了,但是点过一次关于之后,好像所有的循环都失效了?什么也点不了,也退不出来。

cnsnc 发表于 2009-3-2 18:44:24

While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        GUIDelete($Form1_1)
下面加一行exitloop
代码写得真够乱的。。。。这种结构不好

离我远点 发表于 2009-3-2 20:06:19

多谢楼上的帮忙,不过还是不行,我按你说的,在那个位置加个exitloop以后,第一次点“关于”,弹出对话框正常,把那个对话框关掉之后,再去点“关于”,软件什么也不提示,就直接退出了。

cnsnc 发表于 2009-3-2 20:24:29

原帖由 离我远点 于 2009-3-2 20:06 发表 http://www.autoitx.com/images/common/back.gif
多谢楼上的帮忙,不过还是不行,我按你说的,在那个位置加个exitloop以后,第一次点“关于”,弹出对话框正常,把那个对话框关掉之后,再去点“关于”,软件什么也不提示,就直接退出了。
把所有的#include<******>都写到头上去
对了,就算这样还是有问题。。。不过问题不大,要是能换事件模事的话就改掉吧

[ 本帖最后由 cnsnc 于 2009-3-2 20:25 编辑 ]

离我远点 发表于 2009-3-2 21:35:13

放到上面也无法循环,因为选择了关于之后,那个$msg的值已经不等于0了,所以不会循环。

cnsnc 发表于 2009-3-2 22:18:11

................................我试了N次都能正常开关
$msg的值怎么就等于0了,"0"扯太远了,case $msg=0也很是无厘头
脚本小问题不少,先别急着写下去,建议参考下别人的代码,我看看帮助,还有很多功课要做的

离我远点 发表于 2009-3-2 22:40:12

多谢楼上的帮我解答,最后实在编不出来,我把那个关于做成一个程序,用RUN调用了。

cnsnc 发表于 2009-3-2 22:46:15

不难的,关键是要学点基础知识,论坛上的多窗口教程参考下,会很有帮助的。

sxd 发表于 2009-3-3 04:39:31

#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#NoTrayIcon


Opt("TrayMenuMode", 1) ; Default tray menu items (Script Paused/Exit) will not be shown.

$settingsitem = TrayCreateMenu("设置")
$displayitem = TrayCreateItem("显示", $settingsitem)
$printeritem = TrayCreateItem("打印", $settingsitem)
TrayCreateItem("")
$aboutitem = TrayCreateItem("关于")
TrayCreateItem("")
$exititem = TrayCreateItem("退出")

TraySetState()

While 1
        $msg = TrayGetMsg()
        Select
                Case $msg = $aboutitem
                        $Form1_1 = GUICreate("", 274, 115, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS))
                        GUISetIcon("D:\123\456.exe")
                        $Group1 = GUICtrlCreateGroup("关于", 7, 2, 263, 101)
                        $Label1 = GUICtrlCreateLabel("小软件", 94, 14, 88, 17)
                        $Label2 = GUICtrlCreateLabel("软件由我出品", 83, 47, 112, 16)
                        GUICtrlSetFont(-1, 9, 400, 0, "新宋体")
                        GUICtrlSetColor(-1, 0x0000FF)
                        $Label3 = GUICtrlCreateLabel("我的作品", 167, 83, 100, 16)
                        GUICtrlSetFont(-1, 9, 400, 0, "新宋体")
                        GUICtrlCreateGroup("", -99, -99, 1, 1)
                        GUISetState(@SW_SHOW)
                        Do
                        Until GUIGetMsg() = $GUI_EVENT_CLOSE
                        GUIDelete($Form1_1)
                Case $msg = $exititem
                        Exit
        EndSelect
WEnd

Exit

离我远点 发表于 2009-3-9 19:23:35

谢谢楼上的帮助!受教了~!

pccp 发表于 2013-8-6 18:08:44

十楼的解答很好,学习了。
页: [1]
查看完整版本: 关闭GUI后,如何返回托盘菜单而不是退出程序?