找回密码
 加入
搜索
查看: 15023|回复: 22

[GUI管理] 【已解决】请教怎么捕获Input的鼠标点击事件?

 火.. [复制链接]
发表于 2011-4-4 18:06:45 | 显示全部楼层 |阅读模式
本帖最后由 leenkon 于 2011-4-7 15:24 编辑

请教一下高手,怎么捕获Input的鼠标点击事件?如下面,想要鼠标点击输入框则执行一个任务(例如弹出对话框)

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <GUIListBox.au3>
#include <GuiStatusBar.au3>
#include <GuiToolbar.au3>
#include <StaticConstants.au3>

$xz1 = GUICtrlCreateInput("", 368, 560, 81, 21)

while 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                          
                           case $xz1
                                    ************

        EndSwitch
WEnd

while 1
发表于 2011-4-4 18:28:01 | 显示全部楼层
鼠标点击输入框控件,势必会赋予其输入焦点,不妨通过这个来判断。
发表于 2011-4-4 19:00:59 | 显示全部楼层
回覆 1# leenkon

参考http://www.autoitx.com/forum.php ... %3Bfilter%3D2592000
写了一个例子
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <winapi.au3>
#include <Constants.au3>
 
$Form1 = GUICreate("输入框点击例子", 341, 208, 192, 124)
$Input1 = GUICtrlCreateInput("点击我", 72, 40, 153, 33)
$wProcNew = DllCallbackRegister("_MyWindowProc", "ptr", "hwnd;uint;long;ptr")
$wProcOld = _WinAPI_SetWindowLong(GUICtrlGetHandle($Input1), $GWL_WNDPROC, DllCallbackGetPtr($wProcNew))
GUISetState(@SW_SHOW)
 
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                                     GUIDelete($Form1)
                     Exit
        EndSwitch
WEnd
 
Func _MyWindowProc($hWnd, $uiMsg, $wParam, $lParam)
        Switch $uiMsg
                Case $WM_LBUTTONUP
                        MsgBox(64,"提示","点击成功弹出消息")
        EndSwitch
        Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $uiMsg, $wParam, $lParam)
EndFunc   ;==>_MyWindowProc
 楼主| 发表于 2011-4-4 20:51:43 | 显示全部楼层
回复 2# 水木子


    焦点这个不行的。。。我尝试过。。怎么都会激活操作
发表于 2011-4-4 20:54:07 | 显示全部楼层
如果输入框已经是焦点,点击不会触发一个EN_SETFOCUS事件。
发表于 2011-4-4 21:32:57 | 显示全部楼层
学习一下,学习一下
发表于 2011-4-6 21:46:41 | 显示全部楼层
直接用GUICtrlSetOnEvent不就是了吗
发表于 2011-4-6 21:59:24 | 显示全部楼层
应该注册消息吧
GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")

Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
        Global $tabim
        #forceref $hWndGUI, $MsgID, $wParam
        Local $tagNMHDR, $event, $hwndFrom, $code
        $tagNMHDR = DllStructCreate("int;int;int", $lParam) ;NMHDR (hwndFrom, idFrom, code)
        If @error Then Return
        $event = DllStructGetData($tagNMHDR, 3)

        Select
                Case $wParam = $btn
                        Select
                                Case $event = $NM_Click
                                        
                        
                                Case Else
                        EndSelect
        EndSelect
        $tagNMHDR = 0
        $event = 0
        $lParam = 0
EndFunc   ;==>WM_Notify_Events
 楼主| 发表于 2011-4-7 10:09:40 | 显示全部楼层
回复 7# xrzmjz


    这个不行。。。会导致guimsg失效?
 楼主| 发表于 2011-4-7 10:11:00 | 显示全部楼层
回复 8# xyold1


    不好意思,我刚学,不是很明白,因为我想要几个输入框点击都达到这个效果?怎么弄呢
发表于 2011-4-7 11:57:25 | 显示全部楼层
可以用GUISetonEvent来解决因GUICtrlSetOnEvent导致的GUIMSG失效的问题
参考这段代码
GUISetonEvent($GUI_EVENT_CLOSE,"EXITS")
Func EXITS()
EXIT
EndFunc
发表于 2011-4-7 12:10:20 | 显示全部楼层
#include <GUIConstantsEx.au3>
 
$Form1 = GUICreate("输入框点击例子", 341, 208, 192, 124)
$Input1 = GUICtrlCreateInput("点击我", 72, 40, 153, 33)

GUISetState(@SW_SHOW)
 
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_PRIMARYDOWN
                        $Pos = GUIGetCursorInfo($Form1)
                        If $Pos[4] = $Input1 Then MsgBox(0,0,"点击了 Input")
        EndSwitch
WEnd
 楼主| 发表于 2011-4-7 15:22:40 | 显示全部楼层
回复 12# yhxhappy


    十分感谢,你的方法来得省事,
 楼主| 发表于 2011-4-7 15:22:46 | 显示全部楼层
回复 12# yhxhappy


    十分感谢,你的方法来得省事,
发表于 2011-4-7 15:51:23 | 显示全部楼层
case $input
    行不行
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 15:54 , Processed in 0.086707 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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