(已解决)form1界面listview双击弹出from2,但是from2上的按钮没反应了
本帖最后由 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
在WM_NOTIFY消息函数中不能有任何GUI消息循环,WM_NOTIFY函数在接收到消息之后,必须在十分之一秒内处理好消息并返回,否则就会很卡。不只是WM_NOTIFY,所有的消息都会有一个十分之一秒的限制。 回复 2# pusofalse
我去掉while就可以了。
是不是应为while一直的运行,所以就没办法返回消息?
是不是可以理解为,WM_NOTIFY跳转的函数必须是马上就结束的?不能循环或者等待? 回复 3# 330259789
是的。 Form2函数中的While产生了死循环,消息函数没有及时返回,以至于默认的窗口过程没有被及时调用,所以出现了阻塞。 如果消息函数在处理消息时非常费时,以至于不能及时返回,那么就应该考虑一下如何优化代码了,具体问题还要具体分析,单就上例中的代码来说,用OnEvent模式就可以解决(330259789兄貌似就是这样做的),而While 1那句完全是多余的。 回复 4# pusofalse
恩,解释的很清楚,谢谢。
还有个问题,我软件做好了,能进行在线的认证,现在我想做到,如果没有权限使用的话,就自动删除自己,就是自我销毁,这样更安全点,搜索了好像没有关于自我销毁的。。 回复 4# pusofalse
呵呵,自我删除关键字搜索到了,我先去研究下。。。 运行个批处理代码就行了 回复 7# netegg
为什么我贴出来的代码是黑的,别人的是彩色的?(单独开贴肯定被认定无意义贴,所以这里问下了,黑白的看起来不够直观) 我也遇到这样的问题,请教,如果点击一个Listview中的item需要执行sql查询数据库,获取结果,这样的话肯定会超过十分之一秒,该如何处理呢???
请前辈们多多指点,帮帮忙吧,卡壳了 晕,又没看懂, 我也是没怎么看懂
页:
[1]