Label控件能不能接受双击或右键的消息?
我通过注册windows消息GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY"),不能解决label控件的鼠标左键双击或右键单击功能,不知道是不支持还是没有找对方法?#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Label控件测试", 300, 152)
$Label1 = GUICtrlCreateLabel("标签1", 110, 25, 97, 33, $SS_CENTER)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While 1
Switch GUIGetMsg()
Case $Label1
;MsgBox(0, "测试", "左键点击")
Case -3 ; $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)
Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
Local $Index, $itemText, $iMachineId, $answer
$IDFrom = DllStructGetData($tagNMHDR, 2)
$Event = DllStructGetData($tagNMHDR, 3)
$tagNMHDR = 0
If $IDFrom == $Label1 Then
If $Event = $NM_DBLCLK Then MsgBox(0, "测试", "双击了")
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY 回复 1# xms77
兄弟,我来也.
借用了帖子"input2框双击事件遇到的问题"里的关键代码!
http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&pid=588802&ptid=44887#include <WinAPIex.au3>
#include <apiconstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Label控件测试", 300, 152)
$Label1 = GUICtrlCreateLabel("标签1", 110, 25, 97, 33, $SS_CENTER)
GUICtrlSetFont(-1, 20)
$handle = DllCallbackRegister("_lable_events", "ptr", "hwnd;uint;long;ptr")
$handle2 = _WinAPI_SetWindowLong(GUICtrlGetHandle($Label1), $GWL_WNDPROC, DllCallbackGetPtr($handle))
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $Label1
;MsgBox(0, "测试", "左键点击")
Case -3 ; $GUI_EVENT_CLOSE
GUIDelete()
DllCallbackFree($handle) ; 必须释放否则程序不会退出
Exit
EndSwitch
WEnd
Func _lable_events($hWnd, $uiMsg, $wParam, $lParam)
Switch $uiMsg
Case $WM_LBUTTONDBLCLK ; 左键双击
MsgBox(64, "提示", "双击了LABLE!")
Case $WM_RBUTTONDOWN ; 右键按下
MsgBox(64, "提示", "右击了LABLE!")
EndSwitch
Return _WinAPI_CallWindowProc($handle2, $hWnd, $uiMsg, $wParam, $lParam)
EndFunc ;==>_lable_events 回复 2# user3000
顶~ 回复 2# user3000
感谢User3000兄的帮忙,就是没有研究透这些代码,况且我有几百个Label控件,这样好像不是很好搞,看来只能用button控件代替了,这样会容易实现一些。 回复 4# xms77
几百个!在搞大工程哦!露点风? 本帖最后由 xms77 于 2014-8-14 22:34 编辑
回复 5# user3000
算不上大工程,只是帮公司里做了一个C/S模式的设备软件版本监控系统。收集的信息保存在服务端的数据库里,然后服务端读取数据库的信息并显示到GUI上,我用的是Label控件,现在想增加右键Label控件,可以删除或修改该Label控件的显示信息并更新数据库里的信息,所以有了这个提问。
C/S模式的设备软件版本监控系统 有源碼嗎? 回复 6# xms77
这么多,,,,,每个Lable给它建立对应的checkbox,怎么样?
这样还可以批量进行处理. 这个看都没看懂.... 几百个不就多了几百句$handle2 = _WinAPI_SetWindowLong(GUICtrlGetHandle($Label1), $GWL_WNDPROC, DllCallbackGetPtr($handle)) 做个平面按钮不是很简单吗 {:face (411):}学习,学习,感谢感谢 回复 11# netegg
蛋哥的意思是画一个按钮? 不用每个控件添加消息(事件),直接在双击、右键消息里面识别当前的控件并处理 不用每个控件添加消息(事件),直接在双击、右键消息里面识别当前的控件并处理
afan 发表于 2014-8-18 12:45 http://www.autoitx.com/images/common/back.gif
这双击事键一直困绕着我们,请AFAN大举例指点指点。