如何制作下拉菜单效果
本帖最后由 dnvplj 于 2015-6-27 20:11 编辑请问各位朋友,如何制作下图中的“下拉菜单”效果,点击菜单运行一个程序。
回复 1# dnvplj
看看可以找到灵感不? 本帖最后由 dnvplj 于 2015-6-29 10:10 编辑
回复 2# ap112
您说的灵感,我没有找到,但我用单选框解决了。 {:face (370):}回复 3# dnvplj #include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("內置函數示例")
$idOK = GUICtrlCreateButton("点按钮调出菜单", 20, 50, 100, 25)
$OptionsDummy = GUICtrlCreateDummy() ;创建一个虚拟控件,让菜单依托于控件
$ContextMenu = GUICtrlCreateContextMenu($OptionsDummy) ;创造菜单
$Menu1 = GUICtrlCreateMenuItem("菜单1", $ContextMenu)
GUICtrlCreateMenuItem("", $ContextMenu)
$Menu2 = GUICtrlCreateMenuItem("菜单2", $ContextMenu)
GUISetState(@SW_SHOW, $hGUI)
; 循環到用戶退出.
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idOK
_ShowMenu($hGUI, $idOK, $ContextMenu)
Case $Menu1
MsgBox(0, "", "你点的了菜单1")
Case $Menu2
MsgBox(0, "", "你点的了菜单2")
EndSwitch
WEnd
Func _ShowMenu($hWnd, $CtrlID, $nContextID) ; 显示一个 GUI 窗口指定矩形范围的菜单.
Opt("MouseCoordMode", 2)
$arPos = MouseGetPos()
$x = $arPos
$y = $arPos
ClientToScreen($hWnd, $x, $y)
TrackPopupMenu($hWnd, GUICtrlGetHandle($nContextID), $x, $y)
EndFunc ;==>ShowMenu
Func ClientToScreen($hWnd, ByRef $x, ByRef $y) ; 客户端(GUI)坐标转换为屏幕(桌面)坐标.
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)
; 释放结构(并不真正需要的, 因为它是只是一个局部结构).
$stPoint = 0
EndFunc ;==>ClientToScreen
Func TrackPopupMenu($hWnd, $hMenu, $x, $y) ; 显示指定坐标(x,y), 属于一个指定 GUI 窗口(hWnd)的弹出菜单(hMenu).
DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
EndFunc ;==>TrackPopupMenu
回复 5# yhxhappy
好棒,这才是按钮下拉菜单。学习了 本帖最后由 chzj589 于 2015-7-3 09:46 编辑
回复 6# chzj589
原理都差不多活学活用! 是的,应该多想想如何运用。
用自绘图加树形控件做的:
页:
[1]