错误分析:
1.分不清托盘事件和GUi事件,注册事件错误导致设置、关于和退出不能产生相应的事件
2.‘设置’窗口没有注册关闭事件,无法关闭
3.主窗口隐藏后无法弹出是因为没有注册托盘事件
楼主还是好好看看这个教程:
TrayOnEvent模式下的托盘操作实例(中文注释)
http://www.autoitx.com/forum.php?mod=viewthread&tid=174
修改后代码:#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
Global $XL = 250 , $YL = 280
Opt("GUIOnEventMode", 1)
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)
$setnet = TrayCreateItem("设置")
TrayCreateItem("")
$aboutitem = TrayCreateItem("关于")
TrayCreateItem("")
$Exit = TrayCreateItem("退出")
TraySetState()
TrayItemSetOnEvent($setnet,"TrayMsg");注册托盘事件
TrayItemSetOnEvent($aboutitem,"TrayMsg")
TrayItemSetOnEvent($Exit,"TrayMsg")
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "TrayMsg");注册双击托盘事件
$hGUI = GUICreate("窗口1", 325, 440, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_SYSMENU))
GUISetOnEvent($GUI_EVENT_MINIMIZE, "GUICtrlMsg")
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")
$GUI2 = GUICreate ( "设置" , $XL , $YL ,@DesktopWidth - ($XL+9), @DesktopHeight - ($YL+55), BitOR($WS_MINIMIZEBOX, $WS_SYSMENU))
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")
GUISwitch($hGUI) ;切换主窗口
GUISetState(@SW_SHOW) ;显示当前窗口
While 1
Sleep(1100)
WEnd
Func GUICtrlMsg();选择产生消息的 GUI事件
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE,@GUI_WinHandle); 隐藏主窗口
Case $GUI_EVENT_MINIMIZE
GUISetState(@SW_HIDE, $hGUI);还是隐藏主窗口
EndSwitch
EndFunc
Func TrayMsg()
Switch @TRAY_ID ;选择产生消息的 TrayItem 或其它特殊事件(如鼠标左键双击事件)
Case $TRAY_EVENT_PRIMARYDOWN
GUISetState(@SW_SHOW, $hGUI); 双击托盘显示 主窗口
Case $setnet
GUISetState(@SW_SHOW,$GUI2); 显示 子窗口 1
Case $aboutitem
Msgbox(64, "关于:", "AutoIt3-托盘-例子.");弹出消息提示
Case $Exit
Quit();退出
EndSwitch
EndFunc
Func Quit()
Exit
EndFunc
|