找回密码
 加入
搜索
查看: 3375|回复: 5

[系统综合] 【已解决】怎样获取按钮其他的事件?

  [复制链接]
发表于 2012-7-6 22:58:28 | 显示全部楼层 |阅读模式
本帖最后由 garyng 于 2012-7-9 10:53 编辑

如题。

我学过VB,VB里面有各种各样的事件比如:
Button_Click,Button_MouseMove,Button_MouseUp等等

在AU内
切换到事件模式后,
可以用
GUICtrlSetOnEvent($okbutton, "OKButton")
为按钮创建事件对吧?
然后
Func OKButton()
  ;Note: at this point @GUI_CTRLID would equal $okbutton
  MsgBox(0, "GUI Event", "You pressed OK!")
EndFunc
就是事件触发时调用的函数

那我的问题, 怎样获取其他的按钮消息呢?

求高人解释啊!
发表于 2012-7-6 23:21:18 | 显示全部楼层
本帖最后由 user3000 于 2012-7-6 23:24 编辑

回复 1# garyng

GUIRegisterMsg 函数注册其他的按钮消息或各类系统消息,  有按钮的具体类型请查看 Include 目录下的 ButtonConstants.au3 .
请注意 ; Messages  及 ; Notifications 部分.
各消息的定义及说明, 可以到MSDN作进一步查询.

补充: 不只是按钮, 还可以这样查询(处理)其他的控件的消息.
 楼主| 发表于 2012-7-7 17:15:41 | 显示全部楼层
回复 2# user3000


    那样要怎么样判断那个消息被触发呢?有例子么?
发表于 2012-7-7 17:36:05 | 显示全部楼层
将欲处理的系统消息注册成自定义函数,  有事件触发时, 脚本会自动调用该自定义函数

http://www.autoitx.com/forum.php ... 2879&highlight=
发表于 2012-7-8 14:23:54 | 显示全部楼层

th

本帖最后由 amxi 于 2012-7-8 14:25 编辑

guictrlcreatebutton ("01",..)
GUICtrlSetOnEvent(-1, "OK1")

guictrlcreatebutton ("02",..)
GUICtrlSetOnEvent(-1, "OK2")

guictrlcreatebutton ("03",..)
GUICtrlSetOnEvent(-1, "OK3")

func ok1() endfunc
func ok2() endfunc
func ok3() endfunc

还有个switch 语句什么的吧
opt应该也有

好像是这样子
 楼主| 发表于 2012-7-9 10:56:48 | 显示全部楼层
本帖最后由 garyng 于 2012-7-9 10:57 编辑
#include <ButtonConstants.au3> ; 定义了 $BN_CLICKED 等等跟按钮有关的常量
#include <WindowsConstants.au3> ; $WM_COMMAND 等等系统信息代号在此定义
$Form1 = GUICreate("按钮的双击与单击测试", 300, 152)
$Button1 = GUICtrlCreateButton("按钮1", 110, 25, 97, 33, $BS_NOTIFY)
$Button2 = GUICtrlCreateButton("按钮2", 110, 75, 97, 33)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
While 1
        Switch GUIGetMsg()
                Case $Button1
                        MsgBox(0, '按钮1', '正常响应点击! ')
                Case -3 ; $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd

Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
        ; $wParam 为十六进制数, 类似: 0x00050006  换成二进制 共 32位,
        Local $nNotifyCode = BitShift($wParam, 16)    ; 获取'高位',   等于截取为: 0x0005  ; 此数值一般代表: 消息通知到窗体的'代号'
        Local $nID = BitAND($wParam, 0x0000FFFF)   ; 获取'低位',    等于截取为: 0x0006  ; 此数值一般代表: 接受操作的窗体控件ID

        If $nNotifyCode = $BN_DBLCLK Then ;响应按钮双击, 但第二个按钮无 $BS_NOTIFY 样式, 所以不会响应此操作!
                MsgBox(0, GUICtrlRead($nID), '双击操作!')
                Return 0 ; 不再执行前面大循环中的响应 按钮1 的操作: MsgBox(0, '按钮1', '正常响应点击! ') !
        EndIf
        If $nNotifyCode = $BN_CLICKED And $nID <> $Button1 Then ; 响应单击按钮, 但排除了第一个按钮
                MsgBox(0, GUICtrlRead($nID), '单击操作!')
                Return 0
        Else
                Return 0
        EndIf
        ; 以下专为学习 $WM_COMMAND 知识而输出
        Local $hCtrl = $lParam
        If $nID > 2 Then ;响应控件操作时, 输出以下综合信息.
                ; 窗体的控件ID 都是从 3 开始依次而创建!
                ConsoleWrite("窗口句柄" & @TAB & ":" & $hWnd & @LF & _
                                "系统消息代号" & @TAB & ":" & $Msg & @LF & _
                                "消息首参数值" & @TAB & ":" & $wParam & @LF & _
                                "消息次参数值" & @TAB & ":" & $lParam & @LF & @LF & _
                                "WM_COMMAND - 信息" & @LF & _
                                "-----------------------------" & @LF & _
                                "代号" & @TAB & ":" & $nNotifyCode & @LF & _
                                "控件ID" & @TAB & ":" & $nID & @LF & _
                                "控件句柄" & @TAB & ":" & $hCtrl & @CR)
        EndIf
EndFunc   ;==>MY_WM_COMMAND
把相应的代码复制过来,让新手们好搜索啊。
话说 AU3内的控件消息处理跟在MASM32内一样啊!
也是必须自行将通知码提取出来~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-30 05:29 , Processed in 0.078596 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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