找回密码
 加入
搜索
查看: 4369|回复: 4

[系统综合] 左键弹出菜单的问题[已解决]

[复制链接]
发表于 2010-7-27 09:21:43 | 显示全部楼层 |阅读模式
本帖最后由 wanghong01 于 2010-11-20 02:58 编辑

怎样使鼠标左键点击一个控件,也能象右键点击一样弹出菜单呢?
发表于 2010-7-27 10:21:35 | 显示全部楼层
帮助里有
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Local $hGui, $OptionsBtn, $OptionsDummy, $OptionsContext, $OptionsCommon, $OptionsFile, $msg
Local $OptionsExit, $HelpBtn, $HelpDummy, $HelpContext, $HelpWWW, $HelpAbout
$hGui = GUICreate("My GUI", 170, 40)

$OptionsBtn = GUICtrlCreateButton("&Options", 10, 10, 70, 20, $BS_FLAT)

; At first create a dummy control for the options and a contextmenu for it
$OptionsDummy = GUICtrlCreateDummy()
$OptionsContext = GUICtrlCreateContextMenu($OptionsDummy)
$OptionsCommon = GUICtrlCreateMenuItem("Common", $OptionsContext)
$OptionsFile = GUICtrlCreateMenuItem("File", $OptionsContext)
GUICtrlCreateMenuItem("", $OptionsContext)
$OptionsExit = GUICtrlCreateMenuItem("Exit", $OptionsContext)


$HelpBtn = GUICtrlCreateButton("&Help", 90, 10, 70, 20, $BS_FLAT)

; Create a dummy control and a contextmenu for the help too
$HelpDummy = GUICtrlCreateDummy()
$HelpContext = GUICtrlCreateContextMenu($HelpDummy)
$HelpWWW = GUICtrlCreateMenuItem("Website", $HelpContext)
GUICtrlCreateMenuItem("", $HelpContext)
$HelpAbout = GUICtrlCreateMenuItem("About...", $HelpContext)


GUISetState()

While 1
        $msg = GUIGetMsg()

        Switch $msg
                Case $OptionsExit, $GUI_EVENT_CLOSE
                        ExitLoop

                Case $OptionsBtn
                        ShowMenu($hGui, $msg, $OptionsContext)

                Case $HelpBtn
                        ShowMenu($hGui, $msg, $HelpContext)

                Case $HelpAbout
                        MsgBox(64, "About...", "GUICtrlGetHandle-Sample")
        EndSwitch
WEnd
GUIDelete()

; Show a menu in a given GUI window which belongs to a given GUI ctrl
Func ShowMenu($hWnd, $CtrlID, $nContextID)
        Local $arPos, $x, $y
        Local $hMenu = GUICtrlGetHandle($nContextID)

        $arPos = ControlGetPos($hWnd, "", $CtrlID)

        $x = $arPos[0]
        $y = $arPos[1] + $arPos[3]

        ClientToScreen($hWnd, $x, $y)
        TrackPopupMenu($hWnd, $hMenu, $x, $y)
EndFunc   ;==>ShowMenu


; Convert the client (GUI) coordinates to screen (desktop) coordinates
Func ClientToScreen($hWnd, ByRef $x, ByRef $y)
        Local $stPoint = DllStructCreate("int;int")

        DllStructSetData($stPoint, 1, $x)
        DllStructSetData($stPoint, 2, $y)

        DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))

        $x = DllStructGetData($stPoint, 1)
        $y = DllStructGetData($stPoint, 2)
        ; release Struct not really needed as it is a local
        $stPoint = 0
EndFunc   ;==>ClientToScreen


; Show at the given coordinates (x, y) the popup menu (hMenu) which belongs to a given GUI window (hWnd)
Func TrackPopupMenu($hWnd, $hMenu, $x, $y)
        DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
EndFunc   ;==>TrackPopupMenu
 楼主| 发表于 2010-7-27 10:35:10 | 显示全部楼层
回复 2# afan
谢谢楼上的,你真是大好人啦
发表于 2017-1-1 23:24:14 | 显示全部楼层
东西确实在帮助里面有,可惜讲解太少了
发表于 2017-1-2 12:15:48 | 显示全部楼层
可惜我这里来了一个按钮上弹出菜单,就如开始菜单一样的。不知道如何实现了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-25 10:18 , Processed in 0.076132 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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