找回密码
 加入
搜索
查看: 2414|回复: 3

多窗口与托盘的间题?

[复制链接]
发表于 2009-7-5 06:22:22 | 显示全部楼层 |阅读模式
本帖最后由 s77m72 于 2009-7-11 21:13 编辑

多窗口与托盘的间题?
不知哪里错了,主窗口隐藏后不能再显示出来,还有就是点拖盘的设置、关于和退出不能产生相应的事件。
代码如下:
#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()
$hGUI = GUICreate("窗口1", 325, 440, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_SYSMENU))

$GUI2 = GUICreate ( "设置" , $XL , $YL ,@DesktopWidth - ($XL+9), @DesktopHeight - ($YL+55))

GUISwitch($hGUI)                            ;切换当前窗口到主窗口
GUISetState(@SW_SHOW)                          ;显示当前窗口

GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")
GUICtrlSetOnEvent($setnet,"GUICtrlMsg")
GUICtrlSetOnEvent($aboutitem,"GUICtrlMsg")
GUICtrlSetOnEvent($Exit,"GUICtrlMsg")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "GUICtrlMsg")
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "GUICtrlMsg")

While 1
        $msg =  TrayGetMsg()
        Sleep(1100)
WEnd
Func GUICtrlMsg()
        Switch @GUI_CtrlId;选择事件 ID 或 控件 ID
                Case $GUI_EVENT_CLOSE;如果点下的是$GUI_EVENT_CLOSE(关闭)
                        GUISetState(@SW_HIDE,@GUI_WinHandle);  隐藏产生事件的窗口
                Case  $GUI_EVENT_MINIMIZE
                        GUISetState(@SW_HIDE, $hGUI)
                Case  $TRAY_EVENT_PRIMARYDOWN
                        GUISetState(@SW_SHOW, $hGUI)
                Case $msg = $setnet
                        GUISetState(@SW_SHOW,$GUI2);  显示 子窗口 1
                Case $msg = $aboutitem
                        Msgbox(64, "关于:", "AutoIt3-托盘-例子.")
                Case  $msg = $Exit
                        Quit()
        EndSwitch
EndFunc


Func Quit()
   Exit
EndFunc
 楼主| 发表于 2009-7-5 06:23:13 | 显示全部楼层
在线等。。有人会吗?
发表于 2009-7-5 16:36:30 | 显示全部楼层
错误分析:
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
发表于 2014-5-3 20:37:23 | 显示全部楼层
雷锋精神传天下!谢谢分享!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 23:54 , Processed in 0.069187 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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