eaglelin 发表于 2014-11-3 13:32:17

简单控件怎么才能弹出右键菜单【已解决】

本帖最后由 eaglelin 于 2014-11-3 17:12 编辑

我折腾好长时间才搞明白 。原来 像按钮 标签之类的简单控件是不能发出
WM_NOTIFY的消息。所以要在他们上面弹出右键菜单非常困难
但是像listview就没问题
大家有没有好办法 ?

netegg 发表于 2014-11-3 15:02:51

论坛年龄不小了,这也要问呀,找个高处跳吧

austere 发表于 2014-11-3 15:23:53

蛋神你这明显是欺负人啊...

austere 发表于 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

austere 发表于 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

eaglelin 发表于 2014-11-3 17:07:51

回复 2# netegg


    AU3的最高处就是这里了
   除非去玩C++

eaglelin 发表于 2014-11-3 17:12:26

再来发个~~~
austere 发表于 2014-11-3 15:59 http://www.autoitx.com/images/common/back.gif


非常感谢 这个可以的!
这里高人很多哦  ! 

austere 发表于 2014-11-3 18:59:19

回复 7# eaglelin


    呵呵,我是新手。。。。

m765555 发表于 2018-3-28 00:32:55

学习学习,不错。
页: [1]
查看完整版本: 简单控件怎么才能弹出右键菜单【已解决】