找回密码
 加入
搜索
查看: 2837|回复: 11

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

[复制链接]
发表于 2009-3-2 16:49:01 | 显示全部楼层 |阅读模式
#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

之后可以返回了,但是点过一次关于之后,好像所有的循环都失效了?什么也点不了,也退不出来。
发表于 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以后,第一次点“关于”,弹出对话框正常,把那个对话框关掉之后,再去点“关于”,软件什么也不提示,就直接退出了。
发表于 2009-3-2 20:24:29 | 显示全部楼层
原帖由 离我远点 于 2009-3-2 20:06 发表
多谢楼上的帮忙,不过还是不行,我按你说的,在那个位置加个exitloop以后,第一次点“关于”,弹出对话框正常,把那个对话框关掉之后,再去点“关于”,软件什么也不提示,就直接退出了。

把所有的#include<******>都写到头上去
对了,就算这样还是有问题。。。不过问题不大,要是能换事件模事的话就改掉吧

[ 本帖最后由 cnsnc 于 2009-3-2 20:25 编辑 ]
 楼主| 发表于 2009-3-2 21:35:13 | 显示全部楼层
放到上面也无法循环,因为选择了关于之后,那个$msg的值已经不等于0了,所以不会循环。
发表于 2009-3-2 22:18:11 | 显示全部楼层
................................我试了N次都能正常开关
$msg的值怎么就等于0了,"0"扯太远了,case $msg=0也很是无厘头
脚本小问题不少,先别急着写下去,建议参考下别人的代码,我看看帮助,还有很多功课要做的
 楼主| 发表于 2009-3-2 22:40:12 | 显示全部楼层
多谢楼上的帮我解答,最后实在编不出来,我把那个关于做成一个程序,用RUN调用了。
发表于 2009-3-2 22:46:15 | 显示全部楼层
不难的,关键是要学点基础知识,论坛上的多窗口教程参考下,会很有帮助的。
发表于 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 | 显示全部楼层
谢谢楼上的帮助!受教了~!
发表于 2013-8-6 18:08:44 | 显示全部楼层
十楼的解答很好,学习了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-17 14:33 , Processed in 0.271321 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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