combo下拉项与窗口ontop冲突,求教怎么解决?(已解决)
本帖最后由 nay 于 2010-9-16 16:36 编辑设置窗口总在最上后,点击combo的下拉按钮,下拉项不能停留,代码如下:#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("test")
$Combo = GUICtrlCreateCombo("",5,10)
GUICtrlSetData($Combo, "a|b", "a")
GUISetState(@SW_SHOW)
While 1
WinSetOnTop("test", "", 1)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
在官方论坛上有人提出同样的问题,后来说是用popup-gui解决,不太明白。还有其它的解决办法吗? GUICtrlSetState($GUI_ONTOP)
试试 WinSetOnTop("test", "", 1)放置位置有问题
放到while 循环外面就没问题
WinSetOnTop设置一次就行了,不用循环设置#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("test")
$Combo = GUICtrlCreateCombo("",5,10)
GUICtrlSetData($Combo, "a|b", "a")
GUISetState(@SW_SHOW)
WinSetOnTop("test", "", 1)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd 谢谢gto250。上面代码是消息模式下的,没想到消息模式下解决这个问题这么简单。实际上我是为了解决在事件模式下的问题,我对这两种模式理解得不够彻底。我想了下在事件模式下的一个解决办法#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
GUICreate("test")
GUISetOnEvent( $GUI_EVENT_CLOSE,"main" )
$Combo = GUICtrlCreateCombo("",5,10)
GUICtrlSetData($Combo, "a|b", "a")
GUISetState(@SW_SHOW)
While 1
WinSetOnTop("test", "", 1)
sleep( 10000 )
WEnd
Func main()
Switch @GUI_CtrlID
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
EndFunc这样会有一个问题,当正好到了一个sleep周期结束时那一刻问题会再现,只好让sleep时间长些。我起初想的是利用条件判断,但是没成功。所以,请教还有其它的方法吗 为什么非要把WinSetOnTop("test", "", 1)放到while循环里面呢?放到3楼就设置成功了,为什么还要每10秒设置一次呢? 5楼说了我想说的话。
如果你真要这么做的话,那就检测Combo是否正在被下拉。是的话就不用setontop。 WinSetOnTop 放在主循环里,应该是想保持窗口永远在前。但这样做的弊端是显而易见的,甚至会令某些软件无法操作。
WinSetOnTop 最好只使用一次,如果需要永远在前,应该考虑采取将本窗口提至当前顶层窗口的Z序顶层的方式比较好。 哦,大家是对的,是我调试时没够仔细。谢谢各位了,本贴可以结了。
页:
[1]