找回密码
 加入
搜索
查看: 8475|回复: 28

[AU3基础] 如何创建这样的菜单?

 火.. [复制链接]
发表于 2011-3-2 05:04:45 | 显示全部楼层 |阅读模式
就是没有标题栏,没有第一级菜单那一栏,一运行就出来子菜单,如下图所示
没有标题栏,可以用窗口将成为该窗口的子窗口来实现:GUICreate("", $width, $heighth, $Xpos, $Ypos, $WS_POPUP, -1, WinGetHandle(AutoItWinGetTitle()))
没有第一级菜单那一栏,可以用这样来实现:GUICtrlCreateMenu("", 0)
现在的唯一问题是,怎么一运行就显示子菜单

本帖子中包含更多资源

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

×
发表于 2011-3-2 05:39:09 | 显示全部楼层
做个窗体,运行时就隐藏窗体,send模拟右键点击
 楼主| 发表于 2011-3-2 06:10:06 | 显示全部楼层
都隐藏了,还怎么用send点击??
发表于 2011-3-2 07:26:00 | 显示全部楼层
收藏调用时是可以点击的,试下就知道了,我做过绿化器,调用别人的注册机,整个过程都是收藏运行的,当然可以点击了。
发表于 2011-3-2 07:28:05 | 显示全部楼层
上面收藏应隐藏,手机上不能编辑,sorry
 楼主| 发表于 2011-3-2 09:35:52 | 显示全部楼层
希望可以有完全的解决方案。
发表于 2011-3-2 14:24:34 | 显示全部楼层
本帖最后由 飘云 于 2011-3-2 14:38 编辑

为啥一定要用GUICtrlCreateMenu呢,用GUICtrlCreateContextMenu不是也可以吗

另外,那个menu你是要一直存在呢?还是点一个其中的项目就消失呢?默认下这类菜单都是点一下就消失的

写了个类似的效果,主要思路就是用TrackPopupMenuEx函数弹出菜单,不过如果点一下其它地方菜单会消失,有待改进,但至少是个思路不是吗

#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$form = GUICreate("", 100, 100, -1000, -1000, -1, -1,WinGetHandle(AutoItWinGetTitle()))
GUISetState()
$context = GUICtrlCreateContextMenu()
$item_1 = GUICtrlCreateMenuItem("System32",$context)
$item_2 = GUICtrlCreateMenuItem("My Documents",$context)
GUICtrlCreateMenuItem("",$context)
$item_3 = GUICtrlCreateMenuItem("C Drive",$context)
$item_4 = GUICtrlCreateMenuItem("D Drive",$context)
GUICtrlCreateMenuItem("",$context)
$item_5 = GUICtrlCreateMenu("Utilities",$context)
$item_6 = GUICtrlCreateMenu("Command Line",$context)
GUICtrlCreateMenuItem("",$context)
$item_7 = GUICtrlCreateMenuItem("Internet",$context)
GUICtrlCreateMenuItem("",$context)
$item_8 = GUICtrlCreateMenuItem("Configure...",$context)
ShowMenu($form,$context)

While 1
        Sleep(100)
        $msg = GUIGetMsg()
        If $msg = GUIGetMsg() Then ExitLoop
WEnd

Func ShowMenu($hWnd, $nContextID)
        Local $moPos = MouseGetPos()
        Local $hMenu = GUICtrlGetHandle($nContextID);获取需要显示的菜单的句柄
        
        DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $moPos[0], "int", $moPos[1], "hwnd", $hWnd, "ptr", 0);弹出菜单
EndFunc   ;==>按钮弹出菜单函数
发表于 2011-3-2 21:19:29 | 显示全部楼层
不错,,,又学习到好东西了,支持下!
 楼主| 发表于 2011-3-3 20:19:30 | 显示全部楼层
谢谢飘云兄,的确不失一个解决问题的思路与方向,虽然这种菜单一就会消失,有点不合我的要求。
 楼主| 发表于 2011-3-3 21:16:45 | 显示全部楼层
“不过如果点一下其它地方菜单会消失,有待改进”

嗯,已经找到方法,让点别的地方,菜单不消失了,这样,这种方法还是非常不错的。再次感谢飘云兄。
先前没有想到建右键菜单来解决这个问题,思路受阻了
发表于 2011-3-4 14:35:26 | 显示全部楼层
都是高手哇
发表于 2011-3-5 22:54:21 | 显示全部楼层
不错,,,又学习到好东西了,支持下!
 楼主| 发表于 2011-3-5 22:56:37 | 显示全部楼层
回复 7# 飘云

对了,当点了屏幕别的地方,ContextMenu消失后(也就是没有点右键菜单上的任何东西),怎么让程序guidelete掉guicreate()创建的图呀,或者说怎么让程序退出呀

#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
 
$form = GUICreate("", 100, 100, -1000, -1000, -1, -1,WinGetHandle(AutoItWinGetTitle()))
GUISetState()
$context = GUICtrlCreateContextMenu()
$item_1 = GUICtrlCreateMenuItem("System32",$context)
$item_2 = GUICtrlCreateMenuItem("My Documents",$context)
GUICtrlCreateMenuItem("",$context)
$item_3 = GUICtrlCreateMenuItem("C Drive",$context)
$item_4 = GUICtrlCreateMenuItem("D Drive",$context)
GUICtrlCreateMenuItem("",$context)
$item_5 = GUICtrlCreateMenu("Utilities",$context)
$item_6 = GUICtrlCreateMenu("Command Line",$context)
GUICtrlCreateMenuItem("",$context)
$item_7 = GUICtrlCreateMenuItem("Internet",$context)
GUICtrlCreateMenuItem("",$context)
$item_8 = GUICtrlCreateMenuItem("Configure...",$context)
ShowMenu($form,$context)
 
While 1
        Sleep(100)
        $msg = GUIGetMsg()
        Switch $msg
                        Case $item_1
                                ExitLoop
                        Case $item_2
                                MsgBox(0,0,"0k")
                EndSwitch
                GUIDelete()
WEnd
 
Func ShowMenu($hWnd, $nContextID)
        Local $moPos = MouseGetPos()
        Local $hMenu = GUICtrlGetHandle($nContextID);获取需要显示的菜单的句柄
        
        DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $moPos[0], "int", $moPos[1], "hwnd", $hWnd, "ptr", 0);弹出菜单
EndFunc   ;==>按钮弹出菜单函数
 楼主| 发表于 2011-3-6 08:29:13 | 显示全部楼层
回复  飘云

对了,当点了屏幕别的地方,ContextMenu消失后(也就是没有点右键菜单上的任何东西),怎么 ...
happytc 发表于 2011-3-5 22:56


若这个gui不能删掉,导致别的gui通通不能调出来了,问题就大了。
发表于 2011-3-6 13:18:51 | 显示全部楼层
本帖最后由 飘云 于 2011-3-6 15:59 编辑

回复 14# happytc

很简单啊,定义个全局变量Global $result[1],然后弹出函数的调用是有返回值的,$result=DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", GUICtrlGetHandle($nContextID), "int", 0x0100, "int", $moPos[0], "int", $moPos[1], "hwnd", $hWnd, "ptr", 0);弹出菜单,注意第2个参数变为0x0100,然后返回到变量$result中,最后在while循环中加入
If $result[0]=0 Then
                GUIDelete()
                ExitLoop
        EndIf
即可

关于TrackPopupMenuEx函数具体可查看MSDN资料库中的说明


#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $result[1]
$form = GUICreate("", 100, 100, -1000, -1000, -1, -1,WinGetHandle(AutoItWinGetTitle()))
GUISetState()
$context = GUICtrlCreateContextMenu()
$item_1 = GUICtrlCreateMenuItem("System32",$context)
$item_2 = GUICtrlCreateMenuItem("My Documents",$context)
GUICtrlCreateMenuItem("",$context)
$item_3 = GUICtrlCreateMenuItem("C Drive",$context)
$item_4 = GUICtrlCreateMenuItem("D Drive",$context)
GUICtrlCreateMenuItem("",$context)
$item_5 = GUICtrlCreateMenu("Utilities",$context)
$item_6 = GUICtrlCreateMenu("Command Line",$context)
GUICtrlCreateMenuItem("",$context)
$item_7 = GUICtrlCreateMenuItem("Internet",$context)
GUICtrlCreateMenuItem("",$context)
$item_8 = GUICtrlCreateMenuItem("Configure...",$context)
ShowMenu($form,$context)
 
While 1
        Sleep(1000)
        $msg = GUIGetMsg()
        Switch $msg
                Case $item_1
                        ExitLoop
                Case $item_2
                        MsgBox(0,0,"0k")
        EndSwitch
        If $result[0]=0 Then
                GUIDelete()
                ExitLoop
        EndIf
WEnd

Func ShowMenu($hWnd, $nContextID)
        Local $moPos = MouseGetPos()
        $result=DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", GUICtrlGetHandle($nContextID), "int", 0x0100, "int", $moPos[0], "int", $moPos[1], "hwnd", $hWnd, "ptr", 0);弹出菜单
EndFunc   ;==>按钮弹出菜单函数
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-1 13:59 , Processed in 0.087874 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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