本帖最后由 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内一样啊!
也是必须自行将通知码提取出来~ |