找回密码
 加入
搜索
查看: 6770|回复: 10

[AU3基础] (已解决)form1界面listview双击弹出from2,但是from2上的按钮没反应了

  [复制链接]
发表于 2010-12-21 18:48:43 | 显示全部楼层 |阅读模式
本帖最后由 330259789 于 2010-12-21 22:01 编辑

但是如果单独运行from2也是可以的
from2代码如下(还有个问题,为什么我贴出来的代码是黑的,别人的是彩色的)
Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)

        Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
        Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
        If @error Then Return $GUI_RUNDEFMSG
        $IDFrom = DllStructGetData($tagNMHDR, 2)
        $Event = DllStructGetData($tagNMHDR, 3)
        $tagNMHDR = 0
        Switch $IDFrom;选择产生事件的控件
                Case $ListView1
                        Switch $Event; 选择产生的事件
                                Case $NM_CLICK ; 左击
;~                                      ...
                                Case $NM_DBLCLK ; 双击
                                        Form2()
                                Case $NM_RCLICK ; 右击
;~                                     ...
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func Form2()
        $Form2 = GUICreate("", 325, 75, -1, -1, -1, 0)
        $Button4 = GUICtrlCreateButton("确定", 0, 0, 70, 25)
        GUICtrlSetOnEvent(-1, "aa")
        GUISetState(@SW_SHOW)
        ;        Local $pzgp,$Input1,$Input2,$Input3
        #EndRegion ### END Koda GUI section ###
        While 1
                Sleep(100)
        WEnd
EndFunc   ;==>Form2

Func aa()
        msg("aa函数")
EndFunc   ;==>aa

Func msg($x)
        MsgBox(0, "系统提示", $x)
EndFunc   ;==>msg
发表于 2010-12-21 18:57:41 | 显示全部楼层
在WM_NOTIFY消息函数中不能有任何GUI消息循环,WM_NOTIFY函数在接收到消息之后,必须在十分之一秒内处理好消息并返回,否则就会很卡。不只是WM_NOTIFY,所有的消息都会有一个十分之一秒的限制。

评分

参与人数 1金钱 +30 贡献 +2 收起 理由
afan + 30 + 2

查看全部评分

 楼主| 发表于 2010-12-21 19:57:56 | 显示全部楼层
回复 2# pusofalse

我去掉while就可以了。
是不是应为while一直的运行,所以就没办法返回消息?
是不是可以理解为,WM_NOTIFY跳转的函数必须是马上就结束的?不能循环或者等待?
发表于 2010-12-21 21:46:44 | 显示全部楼层
回复 3# 330259789


    是的。 Form2函数中的While产生了死循环,消息函数没有及时返回,以至于默认的窗口过程没有被及时调用,所以出现了阻塞。 如果消息函数在处理消息时非常费时,以至于不能及时返回,那么就应该考虑一下如何优化代码了,具体问题还要具体分析,单就上例中的代码来说,用OnEvent模式就可以解决(330259789兄貌似就是这样做的),而While 1那句完全是多余的。
 楼主| 发表于 2010-12-21 22:01:01 | 显示全部楼层
回复 4# pusofalse

恩,解释的很清楚,谢谢。
还有个问题,我软件做好了,能进行在线的认证,现在我想做到,如果没有权限使用的话,就自动删除自己,就是自我销毁,这样更安全点,搜索了好像没有关于自我销毁的。。
 楼主| 发表于 2010-12-21 22:03:58 | 显示全部楼层
回复 4# pusofalse
呵呵,自我删除关键字搜索到了,我先去研究下。。。
发表于 2010-12-22 04:57:06 | 显示全部楼层
运行个批处理代码就行了
 楼主| 发表于 2010-12-24 15:59:21 | 显示全部楼层
回复 7# netegg

为什么我贴出来的代码是黑的,别人的是彩色的?(单独开贴肯定被认定无意义贴,所以这里问下了,黑白的看起来不够直观)
发表于 2011-4-5 14:50:54 | 显示全部楼层
我也遇到这样的问题,请教,如果点击一个Listview中的item需要执行sql查询数据库,获取结果,这样的话肯定会超过十分之一秒,该如何处理呢???
请前辈们多多指点,帮帮忙吧,卡壳了
发表于 2011-8-2 23:39:14 | 显示全部楼层
晕,又没看懂,
发表于 2019-6-29 08:10:35 | 显示全部楼层
我也是没怎么看懂
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-14 19:03 , Processed in 0.080409 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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