找回密码
 加入
搜索
查看: 4426|回复: 10

[AU3基础] 问个GUIGetMsg()函数的问题

  [复制链接]
发表于 2011-2-18 11:51:34 | 显示全部楼层 |阅读模式
由于程序的托盘菜单是用的是GUIGetMsg()来选(我用ModernMenuRaw.au3里函数的),而点击托盘菜单里选项出来的gui也是用GUIGetMsg()来选的。这样就会出现点击托盘菜单项本来想来gui界面的,结果可能来自托盘的GUIGetMsg()的返回值:事件ID = 0,从而使gui界面闪一下就退出了。怎么让它们两个不混淆?
发表于 2011-2-18 12:08:22 | 显示全部楼层
用两个变量来获得返回值
 楼主| 发表于 2011-2-18 12:25:14 | 显示全部楼层
回复 2# 大绯狼

那是不行的,关键不是在变量,而是GUIGetMsg()返回的是托盘还是gui的事件id。主要是它若得到的是托盘事件时,有可能是无事件,于是GUIGetMsg()就返回0了,结果到了gui里,因为返回值,所有的GUICtrlCreate...都不建了。倒是可以用下面的保证gui窗口可以显示(不是闪下不见了),但有时是个空窗口

While True
        $msg = GUIGetMsg(1)
                 $ClassName = _WinAPI_GetClassName($msg[1])
                If StringInStr($ClassName, "AutoIt v3 GUI") Then
                     Switch $msg[0]
                             case ...
                             case....
                    EndSwitch
                EndIf
WEnd
 楼主| 发表于 2011-2-18 13:17:27 | 显示全部楼层
这个问题,那个老兄知道?

难道真的只能把所有的托盘和所有的gui窗口事件都写到一个While ....GUIGetMsg()....WEnd里来做
这样我创建了多个gui界面,非常不方便写和修改

不用GuiGetMsg(), 用Opt("GuiOnEventMode", 1)来做,也会遇到同样的问题
 楼主| 发表于 2011-2-19 22:39:39 | 显示全部楼层
没人知道了………………
发表于 2011-2-23 22:46:58 | 显示全部楼层
不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘GUI的消息获取不是有TrayGetMsg吗?
发表于 2011-2-23 23:54:33 | 显示全部楼层
我也有楼上的疑问。
用onevent又有何问题?
 楼主| 发表于 2011-2-24 00:13:18 | 显示全部楼层
不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘GUI的消息获取不是有TrayGetMsg吗?
ceoguang 发表于 2011-2-23 22:46


我也想是这样呢,但ModernMenu建的托盘明显不是。它会使有时GUIGetMsg()返回的值是0,从而使gui的得到GUIGetMsg()的值为0,从而使gui界面闪一下就退出了。除非象我上面说的那样,把gui和托盘的写在一个while....GUIGetMsg()....WEnd来判断。但这样,若是gui多个,或gui界面复杂的话,使得这个关于gui的au3太长了。我喜欢每个函数都单独成一个au3文件来写,这样容易修改和维护。

当然au3默认建的托盘没有这样的问题。
 楼主| 发表于 2011-2-24 00:16:49 | 显示全部楼层
我也有楼上的疑问。
用onevent又有何问题?
republican 发表于 2011-2-23 23:54


还是得把托盘和gui的点击写在一个判断里,不然照样不灵光。

看了一些用ModernMenu建托盘程序的例子,无一例外,都是这样干的。哎……
若在我的程序里,把所有gui和托盘写在一个au3文件里,那得上四千行,太难维护了。
 楼主| 发表于 2011-2-24 00:53:41 | 显示全部楼层
不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘GUI的消息获取不是有TrayGetMsg吗?
ceoguang 发表于 2011-2-23 22:46


“你是想退出托盘窗口而不退出程序的主窗口?” --------- 不是的,意思是当在托盘菜单点如“配置”,本来应该出来配置界面的,结果有时这个界面只是出来闪一下就消失了。大概点十次有一次会这样。出现这样时,发现配置gui里的GUIGetMsg()返回值是0
发表于 2011-2-24 09:25:55 | 显示全部楼层
发ModernMenu及你的源码看看
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-21 13:35 , Processed in 0.082560 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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