happytc 发表于 2011-2-18 11:51:34

问个GUIGetMsg()函数的问题

由于程序的托盘菜单是用的是GUIGetMsg()来选(我用ModernMenuRaw.au3里函数的),而点击托盘菜单里选项出来的gui也是用GUIGetMsg()来选的。这样就会出现点击托盘菜单项本来想来gui界面的,结果可能来自托盘的GUIGetMsg()的返回值:事件ID = 0,从而使gui界面闪一下就退出了。怎么让它们两个不混淆?

大绯狼 发表于 2011-2-18 12:08:22

用两个变量来获得返回值

happytc 发表于 2011-2-18 12:25:14

回复 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

happytc 发表于 2011-2-18 13:17:27

这个问题,那个老兄知道?

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

不用GuiGetMsg(), 用Opt("GuiOnEventMode", 1)来做,也会遇到同样的问题

happytc 发表于 2011-2-19 22:39:39

没人知道了………………

ceoguang 发表于 2011-2-23 22:46:58

不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘GUI的消息获取不是有TrayGetMsg吗?

republican 发表于 2011-2-23 23:54:33

我也有楼上的疑问。
用onevent又有何问题?

happytc 发表于 2011-2-24 00:13:18

不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘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默认建的托盘没有这样的问题。

happytc 发表于 2011-2-24 00:16:49

我也有楼上的疑问。
用onevent又有何问题?
republican 发表于 2011-2-23 23:54 http://www.autoitx.com/images/common/back.gif

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

看了一些用ModernMenu建托盘程序的例子,无一例外,都是这样干的。哎……
若在我的程序里,把所有gui和托盘写在一个au3文件里,那得上四千行,太难维护了。

happytc 发表于 2011-2-24 00:53:41

不是很明白楼主的意思,你是想退出托盘窗口而不退出程序的主窗口?另外托盘GUI的消息获取不是有TrayGetMsg吗?
ceoguang 发表于 2011-2-23 22:46 http://www.autoitx.com/images/common/back.gif

“你是想退出托盘窗口而不退出程序的主窗口?” --------- 不是的,意思是当在托盘菜单点如“配置”,本来应该出来配置界面的,结果有时这个界面只是出来闪一下就消失了。大概点十次有一次会这样。出现这样时,发现配置gui里的GUIGetMsg()返回值是0

ceoguang 发表于 2011-2-24 09:25:55

发ModernMenu及你的源码看看
页: [1]
查看完整版本: 问个GUIGetMsg()函数的问题