dnvplj 发表于 2015-6-27 20:08:47

如何制作下拉菜单效果

本帖最后由 dnvplj 于 2015-6-27 20:11 编辑

请问各位朋友,如何制作下图中的“下拉菜单”效果,点击菜单运行一个程序。

ap112 发表于 2015-6-29 08:55:12

回复 1# dnvplj


    看看可以找到灵感不?

dnvplj 发表于 2015-6-29 10:01:15

本帖最后由 dnvplj 于 2015-6-29 10:10 编辑

回复 2# ap112
您说的灵感,我没有找到,但我用单选框解决了。

ap112 发表于 2015-6-29 10:13:32

{:face (370):}回复 3# dnvplj

yhxhappy 发表于 2015-7-1 09:27:46

#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

chzj589 发表于 2015-7-1 10:38:01

回复 5# yhxhappy

好棒,这才是按钮下拉菜单。学习了

chzj589 发表于 2015-7-2 21:21:36

本帖最后由 chzj589 于 2015-7-3 09:46 编辑

回复 6# chzj589





jsgh1983 发表于 2015-7-8 07:59:49

原理都差不多活学活用!

chzj589 发表于 2015-7-8 15:33:40

是的,应该多想想如何运用。
用自绘图加树形控件做的:




页: [1]
查看完整版本: 如何制作下拉菜单效果