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

[AU3基础] 如何制作下拉菜单效果

  [复制链接]
发表于 2015-6-27 20:08:47 | 显示全部楼层 |阅读模式
本帖最后由 dnvplj 于 2015-6-27 20:11 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2015-6-29 08:55:12 | 显示全部楼层
回复 1# dnvplj


    看看可以找到灵感不?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2015-6-29 10:01:15 | 显示全部楼层
本帖最后由 dnvplj 于 2015-6-29 10:10 编辑

回复 2# ap112
您说的灵感,我没有找到,但我用单选框解决了。
发表于 2015-6-29 10:13:32 | 显示全部楼层
回复 3# dnvplj
发表于 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[0]
   $y = $arPos[1]

   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
发表于 2015-7-1 10:38:01 | 显示全部楼层
回复 5# yhxhappy

好棒,这才是按钮下拉菜单。学习了
发表于 2015-7-2 21:21:36 | 显示全部楼层
本帖最后由 chzj589 于 2015-7-3 09:46 编辑

回复 6# chzj589





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2015-7-8 07:59:49 | 显示全部楼层
原理都差不多活学活用!
发表于 2015-7-8 15:33:40 | 显示全部楼层
是的,应该多想想如何运用。
用自绘图加树形控件做的:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-4 01:29 , Processed in 0.086787 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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