事件模式下,_GUICtrlMenu_AddMenuItem怎么用?[已解决]
本帖最后由 CHEARV 于 2010-10-19 19:09 编辑我在网上找了好多的关于菜单的例子,找到一段这样的代码:
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_AddMenuItem($hMenu, "菜单1")
_GUICtrlMenu_AddMenuItem($hMenu, "菜单2")
_GUICtrlMenu_AddMenuItem($hMenu, "菜单3")
_GUICtrlMenu_TrackPopupMenu($hMenu, $hGUI)
_GUICtrlMenu_DestroyMenu($hMenu)
原作者的例子是基于消息模式写的,我想用于事件模式,不知道要怎么写。
我在菜单1语句后面加了这么一句代码:GUICtrlSetOnEvent(-1, "MYfunc1") 无效。请高手帮我改一下:#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiMenu.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$hGUI = GUICreate("Form2", 413, 298, 302, 218)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUIClose")
$Button1 = GUICtrlCreateButton("Button1", 168, 96, 105, 41)
GUICtrlSetOnEvent(-1, "Button1Click")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func Button1Click()
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_AddMenuItem($hMenu, "菜单1")
GUICtrlSetOnEvent(-1, "Myfunc1")
_GUICtrlMenu_AddMenuItem($hMenu, "菜单2")
_GUICtrlMenu_AddMenuItem($hMenu, "菜单3")
_GUICtrlMenu_TrackPopupMenu($hMenu, $hGUI)
_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc
Func GUIClose()
Exit
EndFunc
Func MyFunc1()
MsgBox(0,"Hello","你点了菜单1")
EndFunc 这个最好用右键菜单,不要浪费了按钮控件的基本功能 #include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
$hGUI = GUICreate("Form2", 414, 299, 246, 157)
$MenuItem1 = GUICtrlCreateMenu("文件")
$MenuItem2 = GUICtrlCreateMenuItem("打开", $MenuItem1)
GUICtrlSetOnEvent(-1, "MenuItem2Click")
$MenuItem3 = GUICtrlCreateMenuItem("历史", $MenuItem1)
$MenuItem4 = GUICtrlCreateMenuItem("退出", $MenuItem1)
GUICtrlSetOnEvent(-1, "MenuItem4Click")
$MenuItem5 = GUICtrlCreateMenu("关于")
GUISetOnEvent($GUI_EVENT_CLOSE, "hGUIClose")
GUISetState(@SW_SHOW)
While 1
Sleep(100)
WEnd
Func hGUIClose()
Exit
EndFunc
Func MenuItem2Click()
$file=FileOpenDialog("", @ScriptDir & "\", "AU3文件 (*.au3)", 1 + 4 )
If Not @error Then MsgBox(0,0,$file)
EndFunc
Func MenuItem4Click()
Exit
EndFunc
谢谢楼上朋友,可能我没表达清楚,我不想单独出现菜单栏,仅想点一个控件就谈出上下文菜单,而且是点左键弹出而非右键。 只有我上面找到的那个函数可以实现,但我却不知道怎么调用。 谢谢各位分享,学习了。。。 回复 4# CHEARV
好象 _GUICtrlMenu_AddMenuItem()并没有返回的控件
可以用注册消息的方式,下面是更改后的代码,可以在左键点击按钮后显示菜单,点出菜单运行相应的函数:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiMenu.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$hGUI = GUICreate("Form2", 413, 298, 302, 218)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUIClose")
$Button1 = GUICtrlCreateButton("Button1", 168, 96, 105, 41)
GUICtrlSetOnEvent(-1, "Button1Click")
Global Enum $id1 = 1000, $id2, $id3
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func Button1Click()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_AddMenuItem($hMenu, "菜单1", $id1)
_GUICtrlMenu_AddMenuItem($hMenu, "菜单2", $id2)
_GUICtrlMenu_AddMenuItem($hMenu, "菜单3", $id3)
_GUICtrlMenu_TrackPopupMenu($hMenu, $hGUI)
_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc ;==>Button1Click
Func GUIClose()
Exit
EndFunc ;==>GUIClose
Func MyFunc1($i)
MsgBox(0, "Hello", "你点了菜单" & $i)
EndFunc ;==>MyFunc1
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $id1
MyFunc1(1)
Case $id2
MyFunc1(2)
Case $id3
MyFunc1(3)
EndSwitch
EndFunc ;==>WM_COMMAND
太棒了,谢谢。 另外,我还有两个小疑问:
Global Enum $id1 = 1000, $id2, $id3
这句代码是不是表示我创建控件数量应该控制在1000以内。如果我创建的控制数量超过1000,但$id1依然赋值为1000会出现什么情况?
第二,GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
这句代码是不是放在主程序里面会好些,因为不需要每次都注册吧。 enum $id1=1000 表示后面的变量已经赋值为 1001 1002...以此类推 多看看windows 编程 Autoit 就很简单了 如果你连枚举都不知道 就要像学C语言一样 从头一字不漏看下 教程 很不错的问题刚好解决我的烦恼
页:
[1]