找回密码
 加入
搜索
查看: 5010|回复: 8

[GUI管理] 简单控件怎么才能弹出右键菜单【已解决】

  [复制链接]
发表于 2014-11-3 13:32:17 | 显示全部楼层 |阅读模式
本帖最后由 eaglelin 于 2014-11-3 17:12 编辑

我折腾好长时间才搞明白 。原来 像按钮 标签之类的简单控件是不能发出
WM_NOTIFY的消息。所以要在他们上面弹出右键菜单非常困难
但是像listview就没问题
大家有没有好办法 ?
发表于 2014-11-3 15:02:51 | 显示全部楼层
论坛年龄不小了,这也要问呀,找个高处跳吧
发表于 2014-11-3 15:23:53 | 显示全部楼层
蛋神你这明显是欺负人啊...
发表于 2014-11-3 15:26:59 | 显示全部楼层
user3000的码~ 我给转下~~ 善用搜索
#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-11-3 15:59:02 | 显示全部楼层
再来发个~~~
#include <WinAPIex.au3>
#include <apiconstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("控件点击测试", 300, 152)
$Label1 = GUICtrlCreateButton("你敢点我?", 50, 25, 157, 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, "提示", "你敢双击点我,你敢右击点我看看")
                Case $WM_RBUTTONDOWN ; 右键按下
                        MsgBox(64, "右击LABLE", "你敢右键点我,你敢左键双击看看")
        EndSwitch
        Return _WinAPI_CallWindowProc($handle2, $hWnd, $uiMsg, $wParam, $lParam)
EndFunc   ;==>_lable_events
 楼主| 发表于 2014-11-3 17:07:51 | 显示全部楼层
回复 2# netegg


    AU3的最高处就是这里了
   除非去玩C++
 楼主| 发表于 2014-11-3 17:12:26 | 显示全部楼层
再来发个~~~
austere 发表于 2014-11-3 15:59



非常感谢 这个可以的!
这里高人很多哦  ! 
发表于 2014-11-3 18:59:19 | 显示全部楼层
回复 7# eaglelin


    呵呵,我是新手。。。。
发表于 2018-3-28 00:32:55 | 显示全部楼层
学习学习,不错。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 16:37 , Processed in 0.076933 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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