nay 发表于 2010-9-15 01:23:23

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解决,不太明白。还有其它的解决办法吗?

tianji028 发表于 2010-9-15 22:25:23

GUICtrlSetState($GUI_ONTOP)

试试

gto250 发表于 2010-9-16 06:53:51

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

nay 发表于 2010-9-16 10:21:48

谢谢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时间长些。我起初想的是利用条件判断,但是没成功。所以,请教还有其它的方法吗

tianji028 发表于 2010-9-16 10:48:07

为什么非要把WinSetOnTop("test", "", 1)放到while循环里面呢?放到3楼就设置成功了,为什么还要每10秒设置一次呢?

republican 发表于 2010-9-16 11:17:26

5楼说了我想说的话。

如果你真要这么做的话,那就检测Combo是否正在被下拉。是的话就不用setontop。

afan 发表于 2010-9-16 12:17:22

WinSetOnTop 放在主循环里,应该是想保持窗口永远在前。但这样做的弊端是显而易见的,甚至会令某些软件无法操作。
WinSetOnTop 最好只使用一次,如果需要永远在前,应该考虑采取将本窗口提至当前顶层窗口的Z序顶层的方式比较好。

nay 发表于 2010-9-16 16:35:49

哦,大家是对的,是我调试时没够仔细。谢谢各位了,本贴可以结了。
页: [1]
查看完整版本: combo下拉项与窗口ontop冲突,求教怎么解决?(已解决)