雨滴的孤独 发表于 2008-7-8 17:06:58

帮忙解释一下这个声明的作用

中午关于GUI按下按钮的问题解决了,不过看了友友给的方法还是有一点不明白的地方,下面两个脚本只少了一个声明但运行起来却有差别,是什么原因呢?

第一个脚本:

GUICreate("我的第一个窗口")
$a=GUICtrlCreateButton("确定",-1,-1)
GUISetState(@SW_SHOW)
While 1
If GUIGetMsg()=-3 Then
ExitLoop
EndIf
If GUIGetMsg()=$a Then
MsgBox(0,"","你按下了确定")
EndIf
WEnd

第二个脚本:

GUICreate("我的第一个窗口")
$a=GUICtrlCreateButton("确定",-1,-1)
GUISetState(@SW_SHOW)
While 1
$msg=GUIGetMsg()
If $msg=$a Then
MsgBox(0,"","你按下了确定")
EndIf
If $msg=-3 Then
ExitLoop
EndIf
WEnd

第一个脚本当点击"确定"按钮时经常没弹出MsgBox(0,"","你按下了确定")这个窗口,而第二个每点击一下就会弹出,这两个窗口只相差了一个$msg=GUIGetMsg()声明,为什么就会产生这个差别,知道的朋友能不能解释一下,谢谢了

[ 本帖最后由 雨滴的孤独 于 2008-7-11 21:26 编辑 ]

顽固不化 发表于 2008-7-8 20:45:12

第一个循环中读了两次按钮状态,因此每次读取占循环周期的1/2,也就是一半的时间判断关闭,另一半时间判断“确定”。第二个循环读一次存储。然后判断存储值,也许判断时间远远小于读取时间,所以就准确多了。这是我的理解,欢迎高手批评指正。

sanhen 发表于 2008-7-10 10:06:50

在这里就可以体现出变量的好处了吧。。。

不建议在循环当中大量的使用if then的。相同变量的完全可以改成下边这样的。

Switch GUIGetMsg()
       
        Case -3
                ExitLoop
        Case $a
                MsgBox(0,"","你按下了确定")
EndSwitch

建议在GUI循环当中用GUISetOnEvent模式。

powerofos 发表于 2008-7-10 12:12:39

呵呵,上面提供的IF THEN例子应该是我写的吧?因为怕CASE他没遇到过~,我是新手,看他样子应该也是,所以改成IF THEN了~

雨滴的孤独 发表于 2008-7-11 21:21:01

原来如此,哈哈,太感谢大家了,学到不少啊:face (36):
页: [1]
查看完整版本: 帮忙解释一下这个声明的作用