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

[GUI管理] 关于GUI宏的一些问题 [已解决]

 火.. [复制链接]
发表于 2012-11-26 14:26:59 | 显示全部楼层
TraySetOnEvent看看这个的示例
发表于 2012-11-26 14:33:48 | 显示全部楼层
回复 14# annybaby


   请你再测试确认,基本上,进入错误的分支是绝不可能的~~我测试几十次,都没有问题~~

虽然我发现了@tray_id这个宏的一个BUG~~
发表于 2012-11-26 14:38:23 | 显示全部楼层
回复 15# xiehuahere


    没有点过托盘图标的情况下,@TRAY_ID不存在。
+++++++++++++++++++++++++++++++++++++++++

之所以会出错就是这个原因,我前面11,12两楼已经说过了
 楼主| 发表于 2012-11-26 14:48:58 | 显示全部楼层
回复 17# annybaby


哦,因为我在select语句前面加了个msgbox,导致Active窗口发生变化。
你没有用@GUI_WinHandle宏,是绕开了这个冲突。但在about窗口打开的情况下无法从托盘退出。

好吧,也算学了一招,通过Active的窗口来判断,谢谢!
这样比较ugly,我还是分函数吧。
发表于 2012-11-26 15:06:19 | 显示全部楼层
回复 19# xiehuahere

我以为你懂所以没有解释~~

我第一个帖子就建议你发全码了,因为只有部分码,也懒得一一写了,所以用了最简单的Msgbox来写了个
你发的代码是在我发的之后的,注意:在关于部分,你用的是GUI,我用的是Msgbox,这类的弹窗大多数都是阻断型函数,所以在打开Msgbox时,脚本已经暂停了,虽然还是接收到消息,但却无法响应~~
看下面的就可以(替换成了你自己的)
   
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIButton.au3>
Opt("GUIOnEventMode", 1)
Opt("trayOnEventMode", 1)
TraySetClick(8)
Opt("TrayMenuMode", 3)

$win = GUICreate("test", 251, 160, 482, 287)
GUISetOnEvent(-3, '_exit')
GUISetState(1)
$child=GUICreate('子窗体',100,100)
GUISetState(1)
GUISetOnEvent(-3, '_exit')
$about=TrayCreateItem('关于')
TrayItemSetOnEvent(-1, "_exit")
TrayCreateItem('')
$exit = TrayCreateItem("退出")
TrayItemSetOnEvent(-1, "_exit")
While 1
        Sleep(5000)
WEnd

Func _exit()
Select 
        Case WinGetHandle('[active]')=$win
                MsgBox(0,@TRAY_ID,'从窗口中退出!',0,$win)
                Exit
        Case WinGetHandle('[active]')=$child
                MsgBox(0,0,'关闭子窗口!',0,$child)
                GUIDelete($child)
        Case @TRAY_ID=$exit
                        MsgBox(0x40000,0,'从托盘中退出!',2)
                        Exit
        Case @TRAY_ID=$about
                        _About()
EndSelect
EndFunc   ;==>_exit

Func _About()
        TrayItemSetState($About, $TRAY_UNCHECKED + $TRAY_DISABLE)   
        $hWinAbout = GUICreate("About", 300, 200, -1, -1, Bitor($WS_CAPTION,$WS_SYSMENU), $WS_EX_TOPMOST)
        GUISetState()
EndFunc
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-1 07:59 , Processed in 0.101236 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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