如何检测GUI中的Button按下与放开
本帖最后由 lrbin50 于 2009-9-9 16:19 编辑如题,但这不是点击,我想在鼠标按下这个按钮时执行一段代码,而放开时又执行另一段代码
像
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 227, 59, 192, 124)
$Button1 = GUICtrlCreateButton("确定", 16, 16, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("取消", 112, 16, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox (0,"","你点击了【确定】按钮")
Case $Button2
MsgBox (0,"","你点击了【取消】按钮")
EndSwitch
WEnd
这样的是不符合我的要求的!
请大家指教,谢谢! 本帖最后由 netegg 于 2009-9-9 07:47 编辑
看看关于$WM_Notify,可能有帮助,那个在列表框和树形列表里用的挺多的,不过不好意思,我没搞得太明白
或者去官网找找看关于buttonhover,记忆里好象有 本帖最后由 水木子 于 2009-9-9 09:28 编辑
等待高手来解答吧!帮你顶起。 本帖最后由 zjimmy 于 2009-9-9 11:49 编辑
我利用UDF搞成了这段代码,方法比较“土”,可能不够高级,希望有所帮助。
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>
Global $PreBtnDown
$Form1 = GUICreate("Form1", 227, 59, 192, 124)
$Button1 = GUICtrlCreateButton("确定", 16, 16, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("取消", 112, 16, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYDOWN
Select
Case _ButtonIsDown($Button1, $PreBtnDown)
MsgBox(0, "", "你按下了【确定】按钮")
Case _ButtonIsDown($Button2, $PreBtnDown)
MsgBox(0, "", "你按下了【取消】按钮")
EndSelect
Case $GUI_EVENT_PRIMARYUP
Select
Case _ButtonIsRelease($Button1, $PreBtnDown)
MsgBox(0, "", "你松开了【确定】按钮")
Case _ButtonIsRelease($Button2, $PreBtnDown)
MsgBox(0, "", "你松开了【取消】按钮")
EndSelect
EndSwitch
WEnd
Func _ButtonIsDown($hBtn, ByRef $hPreBtnDown)
If BitAND(_GUICtrlButton_GetState($hBtn), $BST_PUSHED) Then
$hPreBtnDown = $hBtn
Return 1
Else
Return 0
EndIf
EndFunc ;==>_ButtonIsDown
Func _ButtonIsRelease($hBtn, ByRef $hPreBtnDown)
If $hBtn <> $hPreBtnDown Then Return 0
If BitAND(_GUICtrlButton_GetState($hBtn), $BST_PUSHED) Then
$hPreBtnDown = $hBtn
Return 0
Else
Return 1
EndIf
EndFunc ;==>_ButtonIsRelease 谢了,zjimmy ,不过有个问题,就是拖动窗口也说你松开了按钮。看一下还有没有更多的答案。 谢了,zjimmy ,不过有个问题,就是拖动窗口也说你松开了按钮。看一下还有没有更多的答案。
lrbin50 发表于 2009-9-9 12:48 http://www.autoitx.com/images/common/back.gif
不谢,还没有解决问题呢。
嗯,这的确是个问题,大概“松开按钮”的判断时机选择不对,我再琢磨琢磨看有没有解决办法。
期待高手有比较高级的解决方法! Msgbox(xxx) 最好改成 ToolTip("你xxx按钮") 呵呵 本帖最后由 afan 于 2009-9-9 14:19 编辑
修改了下LS的代码:
_ButtonIsRelease 函数修改了下,只会响应按钮;
提示改为工具提示。#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
Dim $PreBtnDown
GUICreate("鼠标左键状态", 255, 60)
$Button1 = GUICtrlCreateButton("确定", 10, 16, 75, 25)
$Button2 = GUICtrlCreateButton("取消", 90, 16, 75, 25)
$Button3 = GUICtrlCreateButton("退出", 170, 16, 75, 25)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button3
Exit
Case $GUI_EVENT_PRIMARYDOWN
Select
Case _ButtonIsDown($Button1, $PreBtnDown)
ToolTip("您按下了【确定】按钮")
Case _ButtonIsDown($Button2, $PreBtnDown)
ToolTip("您按下了【取消】按钮")
EndSelect
Case $GUI_EVENT_PRIMARYUP
Select
Case _ButtonIsRelease($Button1, $PreBtnDown)
ToolTip("您松开了【确定】按钮")
Case _ButtonIsRelease($Button2, $PreBtnDown)
ToolTip("您松开了【取消】按钮")
Case Else
ToolTip("")
EndSelect
EndSwitch
WEnd
Func _ButtonIsDown($hBtn, ByRef $hPreBtnDown)
If BitAND(_GUICtrlButton_GetState($hBtn), $BST_PUSHED) Then
$hPreBtnDown = $hBtn
Return 1
Else
Return 0
EndIf
EndFunc ;==>_ButtonIsDown
Func _ButtonIsRelease($hBtn, ByRef $hPreBtnDown)
If $hBtn <> $hPreBtnDown Then Return 0
If BitAND(_GUICtrlButton_GetState($hBtn), $BST_PUSHED) Then
$hPreBtnDown = $hBtn
Return 0
Else
$hPreBtnDown = 0
Return 1
EndIf
EndFunc ;==>_ButtonIsRelease 感谢AFAN!你这个代码有效! 一句“$hPreBtnDown = 0”,差之毫厘,谬以千里呀~~
受教了! 呵呵,代码都是LS滴,我只小小改动而已~~
我是新手,还要向各位多多学习~~
页:
[1]