如何实现按钮下拉菜单?(已解决)
本帖最后由 xiezhang6263 于 2011-5-20 21:51 编辑我想通过button点击实现下拉菜单的目的。
这个不是我想要的目的,我想保证前面的按钮的样式和这个按钮下拉菜单的按钮统一的样式。麻烦知道的朋友帮忙下,谢谢。#include <GuiToolbar.au3>
#include <GuiMenu.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
Global $hGUI
Local $hToolbar
Local Enum $idNew = 1000, $idOpen
$hGUI = GUICreate("Toolbar", 200,100)
$hToolbar = _GUICtrlToolbar_Create($hGUI)
_GUICtrlToolbar_SetExtendedStyle($hToolbar, $TBSTYLE_EX_DRAWDDARROWS)
GUISetState()
_GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_SMALL_COLOR)
_GUICtrlToolbar_AddButton($hToolbar, $idNew, $STD_FILENEW, 0, $BTNS_DROPDOWN)
_GUICtrlToolbar_AddButton($hToolbar, $idOpen, $STD_FILEOPEN)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While 1
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
WEnd
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $tNMHDR, $iCode, $hMenu
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$iCode = DllStructGetData($tNMHDR, "Code")
If $iCode = $TBN_DROPDOWN Then
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_AddMenuItem($hMenu, "菜单1")
_GUICtrlMenu_AddMenuItem($hMenu, "菜单2")
_GUICtrlMenu_AddMenuItem($hMenu, "菜单3")
_GUICtrlMenu_TrackPopupMenu($hMenu, $hGUI)
_GUICtrlMenu_DestroyMenu($hMenu)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY 我真的没有看明白楼主想干什么 回复 2# haijie1223
如上图,就是想把前面的图标变成按钮,然后点击按钮会出来像菜单1,菜单2这样的选项,然后对菜单1菜单2进行相应的func。 这个应该好实现,不过我得回家了。晚上回去研究一下。 回复 4# haijie1223
谢谢,辛苦了,我在论坛里搜索了好久都没没找到需要的。 #include <GUIConstantsEx.au3>
#include <GuiMenu.au3>
#include <WindowsConstants.au3>
Opt("GUICoordMode", 1)
$hGUI = GUICreate("Menu", 400, 300)
Global Const $idButton = GUICtrlCreateButton("Test", 100, 100, 80, 40)
Global Enum $idNew = 1000, $idOpen, $idClose, $idExit
Global $hMenu
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem ($hMenu, 0, "新建文件", $idNew)
_GUICtrlMenu_InsertMenuItem ($hMenu, 1, "", 0)
_GUICtrlMenu_InsertMenuItem ($hMenu, 2, "打开文件", $idOpen)
_GUICtrlMenu_InsertMenuItem ($hMenu, 3, "关闭文件", $idClose)
_GUICtrlMenu_InsertMenuItem ($hMenu, 4, "", 0)
_GUICtrlMenu_InsertMenuItem ($hMenu, 5, "退出", $idExit)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
_GUICtrlMenu_DestroyMenu($hMenu)
GUIDelete()
Exit
Case $idButton
ShowMenu($hGUI)
EndSwitch
WEnd
Func New()
MsgBox(0, "信息", "新建文件")
EndFunc
Func Open()
MsgBox(0, "信息", "打开")
EndFunc
Func Close()
MsgBox(0, "信息", "关闭")
EndFunc
Func ShowMenu($hWnd)
Local $aButton = ControlGetPos("", "", $idButton)
Local $x = $aButton
Local $y = $aButton + $aButton
ClientToScreen($hGUI, $x, $y)
_GUICtrlMenu_TrackPopupMenu($hMenu, $hWnd, $x, $y)
Return True
EndFunc ;==>WM_CONTEXTMENU
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $idNew
New()
Case $idOpen
Open()
Case $idClose
Close()
Case $idExit
Exit
EndSwitch
EndFunc
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)
$stPoint = 0
EndFunc ;==>ClientToScreen 回复 6# 3mile
谢谢你,3mile。
问题解决了,还有就是下面这个帖子的问题。http://www.autoitx.com/forum.php?mod=viewthread&tid=24463&highlight=麻烦帮忙下,有没办法让打开的google翻译网页,提取出网页的源码跟右击的提取出来的是一样的。
_IEDocReadHTML用这个提取出来的跟源文件是不一样的,不知道还有其他的办法没有,我现在用的是模拟鼠标键盘的操作,右击提取出来的,然后通过读取保存的源文件.txt正则得到自己想要的。麻烦3mile帮忙下,看有没好的解决办法。谢谢。 回复 7# xiezhang6263
提取源码干什么?是想要发送需要翻译的文件,返回翻译好的内容吗? 回复 8# 3mile
不是的,是我们内网的网页上需要提取相关人员的信息,但是这个信息是需要输入身份证查询得到的基本信息的,跟这个google翻译有点差不多的原理,输入不同的身份证号码会得到不同人员的信息,里面有户籍地等等,我想就是在这个网页上输入身份证号码,把里面得到的信息反馈给我们。 学习下。。。。。。。。。。 回复 8# 3mile
要是有两个按钮要实现这样的效果每个按钮下面的菜单对应的是不同的项目,请问如何操作呢?谢谢。 来晚了看到3m的源码 我就不发源码了我的代码好麻烦 效率太低学习了 回复 11# xiezhang6263
#include <GuiToolbar.au3>
#include <GuiMenu.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
Global $hGUI
Local $hToolbar
Global Enum $idOpen = 1000, $idSave, $idInfo
Global Enum $idOpen1 = 2000, $idSave1, $idInfo1
$hGUI = GUICreate("Toolbar", 200, 100)
$Button = GUICtrlCreateButton("Button", 100, 10)
$Button1 = GUICtrlCreateButton("Button1", 100, 60)
GUISetState()
GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
;~ GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While 1
$nMsg=GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button,$Button1
WM_CONTEXTMENU($hGUI)
EndSwitch
WEnd
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $idOpen1
_WinAPI_ShowMsg("关于")
Case $idSave1
_WinAPI_ShowMsg("设置")
Case $idInfo1
_WinAPI_ShowMsg("退出")
Case $idOpen
_WinAPI_ShowMsg("按钮_关于")
Case $idSave
_WinAPI_ShowMsg("按钮_设置")
Case $idInfo
_WinAPI_ShowMsg("按钮_退出")
EndSwitch
EndFunc ;==>WM_COMMAND
Func WM_CONTEXTMENU($hWnd)
Local $aa = GUIGetCursorInfo()
If $aa = $Button Then
Local $hMenu
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "按钮_关于", $idOpen)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "按钮_设置", $idSave)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "按钮_退出", $idInfo)
_GUICtrlMenu_TrackPopupMenu($hMenu, $hGUI)
_GUICtrlMenu_DestroyMenu($hMenu)
Return True
ElseIf $aa=$Button1 Then
Local $hMenu
$hMenu1 = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu1, 0, "关于", $idOpen1)
_GUICtrlMenu_InsertMenuItem($hMenu1, 1, "设置", $idSave1)
_GUICtrlMenu_InsertMenuItem($hMenu1, 3, "", 0)
_GUICtrlMenu_InsertMenuItem($hMenu1, 3, "退出", $idInfo1)
_GUICtrlMenu_TrackPopupMenu($hMenu1, $hGUI)
_GUICtrlMenu_DestroyMenu($hMenu1)
Return True
EndIf
Return "GUI_RUNDEFMSG"
EndFunc ;==>WM_CONTEXTMENU
有三笑兄的地方就会有欢乐的笑声!!
实践证明,笑兄是个非常热心的人!!挺你!! 回复 13# 3mile
谢谢3mile的热心帮助,假如我想实现两个button的下拉方式,跟你提供的第一个方法一样的样式
是用ControlGetPos相对控件而不是GUIGetCursorInfo()相对gui窗口,请问该怎么实现呢?
页:
[1]
2