问个GUIGetMsg()函数的问题
由于程序的托盘菜单是用的是GUIGetMsg()来选(我用ModernMenuRaw.au3里函数的),而点击托盘菜单里选项出来的gui也是用GUIGetMsg()来选的。这样就会出现点击托盘菜单项本来想来gui界面的,结果可能来自托盘的GUIGetMsg()的返回值:事件ID = 0,从而使gui界面闪一下就退出了。怎么让它们两个不混淆? 用两个变量来获得返回值 回复 2# 大绯狼那是不行的,关键不是在变量,而是GUIGetMsg()返回的是托盘还是gui的事件id。主要是它若得到的是托盘事件时,有可能是无事件,于是GUIGetMsg()就返回0了,结果到了gui里,因为返回值,所有的GUICtrlCreate...都不建了。倒是可以用下面的保证gui窗口可以显示(不是闪下不见了),但有时是个空窗口
While True
$msg = GUIGetMsg(1)
$ClassName = _WinAPI_GetClassName($msg)
If StringInStr($ClassName, "AutoIt v3 GUI") Then
Switch $msg
case ...
case....
EndSwitch
EndIf
WEnd
这个问题,那个老兄知道?
难道真的只能把所有的托盘和所有的gui窗口事件都写到一个While ....GUIGetMsg()....WEnd里来做
这样我创建了多个gui界面,非常不方便写和修改
不用GuiGetMsg(), 用Opt("GuiOnEventMode", 1)来做,也会遇到同样的问题 没人知道了……………… 不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘GUI的消息获取不是有TrayGetMsg吗? 我也有楼上的疑问。
用onevent又有何问题? 不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘GUI的消息获取不是有TrayGetMsg吗?
ceoguang 发表于 2011-2-23 22:46 http://www.autoitx.com/images/common/back.gif
我也想是这样呢,但ModernMenu建的托盘明显不是。它会使有时GUIGetMsg()返回的值是0,从而使gui的得到GUIGetMsg()的值为0,从而使gui界面闪一下就退出了。除非象我上面说的那样,把gui和托盘的写在一个while....GUIGetMsg()....WEnd来判断。但这样,若是gui多个,或gui界面复杂的话,使得这个关于gui的au3太长了。我喜欢每个函数都单独成一个au3文件来写,这样容易修改和维护。
当然au3默认建的托盘没有这样的问题。 我也有楼上的疑问。
用onevent又有何问题?
republican 发表于 2011-2-23 23:54 http://www.autoitx.com/images/common/back.gif
还是得把托盘和gui的点击写在一个判断里,不然照样不灵光。
看了一些用ModernMenu建托盘程序的例子,无一例外,都是这样干的。哎……
若在我的程序里,把所有gui和托盘写在一个au3文件里,那得上四千行,太难维护了。 不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘GUI的消息获取不是有TrayGetMsg吗?
ceoguang 发表于 2011-2-23 22:46 http://www.autoitx.com/images/common/back.gif
“你是想退出托盘窗口而不退出程序的主窗口?” --------- 不是的,意思是当在托盘菜单点如“配置”,本来应该出来配置界面的,结果有时这个界面只是出来闪一下就消失了。大概点十次有一次会这样。出现这样时,发现配置gui里的GUIGetMsg()返回值是0 发ModernMenu及你的源码看看
页:
[1]