找回密码
 加入
搜索
查看: 23022|回复: 30

[GUI管理] Label控件能不能接受双击或右键的消息?

 火... [复制链接]
发表于 2014-8-13 12:33:27 | 显示全部楼层 |阅读模式
我通过注册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
发表于 2014-8-13 20:09:54 | 显示全部楼层
回复 1# xms77
兄弟,我来也.
借用了帖子"input2框双击事件遇到的问题"里的关键代码!
http://www.autoitx.com/forum.php ... 8802&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
发表于 2014-8-13 22:21:23 | 显示全部楼层
回复 2# user3000


    顶~
 楼主| 发表于 2014-8-13 22:37:27 | 显示全部楼层
回复 2# user3000
感谢User3000兄的帮忙,就是没有研究透这些代码,况且我有几百个Label控件,这样好像不是很好搞,看来只能用button控件代替了,这样会容易实现一些。
发表于 2014-8-14 18:09:21 | 显示全部楼层
回复 4# xms77

几百个!在搞大工程哦!露点风?
 楼主| 发表于 2014-8-14 22:32:43 | 显示全部楼层
本帖最后由 xms77 于 2014-8-14 22:34 编辑

回复 5# user3000
算不上大工程,只是帮公司里做了一个C/S模式的设备软件版本监控系统。收集的信息保存在服务端的数据库里,然后服务端读取数据库的信息并显示到GUI上,我用的是Label控件,现在想增加右键Label控件,可以删除或修改该Label控件的显示信息并更新数据库里的信息,所以有了这个提问。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-8-15 11:34:57 | 显示全部楼层
C/S模式的设备软件版本监控系统 有源碼嗎?
发表于 2014-8-15 18:25:29 | 显示全部楼层
回复 6# xms77


   这么多,,,,,每个Lable给它建立对应的checkbox,怎么样?
   这样还可以批量进行处理.
发表于 2014-8-16 17:46:24 | 显示全部楼层
这个看都没看懂....
发表于 2014-8-17 08:46:38 | 显示全部楼层
几百个不就多了几百句$handle2 = _WinAPI_SetWindowLong(GUICtrlGetHandle($Label1), $GWL_WNDPROC, DllCallbackGetPtr($handle))
发表于 2014-8-18 07:10:16 | 显示全部楼层
做个平面按钮不是很简单吗
发表于 2014-8-18 10:10:33 | 显示全部楼层
  学习,学习,感谢感谢
 楼主| 发表于 2014-8-18 12:00:50 | 显示全部楼层
回复 11# netegg
蛋哥的意思是画一个按钮?
发表于 2014-8-18 12:45:41 | 显示全部楼层
不用每个控件添加消息(事件),直接在双击、右键消息里面识别当前的控件并处理
发表于 2014-8-18 19:32:38 | 显示全部楼层
不用每个控件添加消息(事件),直接在双击、右键消息里面识别当前的控件并处理
afan 发表于 2014-8-18 12:45



这双击事键一直困绕着我们,请AFAN大举例指点指点。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 07:12 , Processed in 0.086531 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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