找回密码
 加入
搜索
查看: 4361|回复: 7

[GUI管理] combo下拉项与窗口ontop冲突,求教怎么解决?(已解决)

  [复制链接]
发表于 2010-9-15 01:23:23 | 显示全部楼层 |阅读模式
本帖最后由 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解决,不太明白。还有其它的解决办法吗?

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-9-15 22:25:23 | 显示全部楼层
GUICtrlSetState($GUI_ONTOP)

试试
发表于 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
 楼主| 发表于 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时间长些。我起初想的是利用条件判断,但是没成功。所以,请教还有其它的方法吗
发表于 2010-9-16 10:48:07 | 显示全部楼层
为什么非要把WinSetOnTop("test", "", 1)放到while循环里面呢?放到3楼就设置成功了,为什么还要每10秒设置一次呢?
发表于 2010-9-16 11:17:26 | 显示全部楼层
5楼说了我想说的话。

如果你真要这么做的话,那就检测Combo是否正在被下拉。是的话就不用setontop。
发表于 2010-9-16 12:17:22 | 显示全部楼层
WinSetOnTop 放在主循环里,应该是想保持窗口永远在前。但这样做的弊端是显而易见的,甚至会令某些软件无法操作。
WinSetOnTop 最好只使用一次,如果需要永远在前,应该考虑采取将本窗口提至当前顶层窗口的Z序顶层的方式比较好。
 楼主| 发表于 2010-9-16 16:35:49 | 显示全部楼层
哦,大家是对的,是我调试时没够仔细。谢谢各位了,本贴可以结了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 03:17 , Processed in 0.085343 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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