找回密码
 加入
搜索
查看: 1388|回复: 10

GUI一闪而过是什么问题?

[复制链接]
发表于 2009-8-9 22:08:27 | 显示全部楼层 |阅读模式
本帖最后由 omegabomb 于 2009-8-11 12:06 编辑
#include <GuiMenu.au3>
#include <GUIConstants.au3>

Global $hSysMenu,$hExit,$hMainMenu
$MainGUI = GUICreate("快捷工具条",65, 20, -1, 0)
$hMainMenu = _GUICtrlMenu_CreateMenu()
$hSysMenu = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hMainMenu,0, "系统设置", 0, $hSysMenu)
_GUICtrlMenu_InsertMenuItem($hSysMenu, 0, "", 0)
_GUICtrlMenu_InsertMenuItem($hSysMenu, 1, "退出", 0, $hExit)
_GUICtrlMenu_SetMenu($MainGUI, $hMainMenu)
GUISwitch($MainGUI)
GUISetState(@SW_SHOW)
;<=====END
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $hExit
                        Exit
        EndSwitch
WEnd
这段代码为什么一闪而过呢?把Case $hExit改为Case $GUI_EVENT_CLOSE就可以了,但是想不通为什么这个不行呢?我想通过“退出”菜单退出
发表于 2009-8-9 22:23:05 | 显示全部楼层
菜单设置错了啊,建议仔细看看帮助
 楼主| 发表于 2009-8-9 22:39:03 | 显示全部楼层
能否指点一下哪里错了?
 楼主| 发表于 2009-8-9 22:51:56 | 显示全部楼层
_GUICtrlMenu_InsertMenuItem($hMenu, $iIndex, $sText[, $iCmdID = 0[, $hSubMenu = 0]])

这里面的$hSubMenu不是菜单项的句柄吗?
发表于 2009-8-10 08:37:51 | 显示全部楼层
#include <GuiMenu.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>

Global $hMainMenu,$hSysMenu,$hother
Global  Enum $hSys =0x1000,$hExit
$MainGUI = GUICreate("快捷工具条",400, 300, -1, 0)

$hSysMenu = _GUICtrlMenu_CreateMenu();这里建立第一菜单的内容, 包括二项
_GUICtrlMenu_InsertMenuItem($hSysMenu, 0, "系统设置", $hSys)
_GUICtrlMenu_InsertMenuItem($hSysMenu, 1, "", 0)
_GUICtrlMenu_InsertMenuItem($hSysMenu, 2, "退出", $hExit)

$hother = _GUICtrlMenu_CreateMenu();这里建立第二菜单,菜单下无内容

$hMainMenu = _GUICtrlMenu_CreateMenu();这里是二个菜单联系起来
_GUICtrlMenu_InsertMenuItem ($hMainMenu, 0, "第一菜单", 0, $hSysMenu)
_GUICtrlMenu_InsertMenuItem ($hMainMenu, 1, "第二菜单", 0, $hother)

_GUICtrlMenu_SetMenu($MainGUI, $hMainMenu);这里是创建刚才联系好的菜单


GUISwitch($MainGUI)
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND");我是看了帮助,找到菜单要注册消息事件,MY_WM_COMMAND()处理菜单事件

GUISetState(@SW_SHOW)
;<=====END
While 1
        $nMsg = GUIGetMsg()

        Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                                Exit
        EndSwitch
WEnd
        
Func MY_WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam);这里就是处理菜单事件
    Switch $iwParam

        Case $hExit
            Exit

    EndSwitch
EndFunc   ;==>WM_COMMAND
仔细帮你调试了一下,中文菜单要完整显示必须要编译好才能完整
 楼主| 发表于 2009-8-10 09:07:41 | 显示全部楼层
本帖最后由 omegabomb 于 2009-8-10 09:12 编辑

中文菜单少字,可以参考这贴解决:http://www.autoitx.com/forum.php?mod=viewthread&tid=5966
必须用GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")注册消息事件吗?
以前用$exititem = GUICtrlCreateMenuItem("Exit", $filemenu)直接可以返回菜单的句柄,下面就直接case里面添加$exititem就行了。
现在用了_GUICtrlMenu_InsertMenuItem($hSysMenu, 2, "退出", $hExit),那这个$hExit到底是什么句柄?难道只是用来接收下级菜单的?我是想不用消息注册事件,直接和以前一样读取句柄,方便点。不知可否实现?
发表于 2009-8-10 09:16:51 | 显示全部楼层
这我也不怎么清楚,
如果你感觉UDF的不方便,就不要用UDF的啊
GUICtrlCreateMenuItem这个现在还是能用的啊
 楼主| 发表于 2009-8-10 09:23:38 | 显示全部楼层
GUICtrlCreateMenuItem这个似乎必须放在GUICtrlCreateMenu的下面,固定的,不能放在子函数中,动态插入无法实现,_GUICtrlMenu_InsertMenuItem有个好处就是可以放在函数中,想插入就插入。
还有个不懂,Global  Enum这个Enum是什么意思?
发表于 2009-8-10 09:27:19 | 显示全部楼层
Enum就是赋值时给后面的变量依次加1
 楼主| 发表于 2009-8-10 09:46:44 | 显示全部楼层
谢谢了,我再研究下
 楼主| 发表于 2009-8-10 11:12:34 | 显示全部楼层
还是用原来的GUICtrlCreateMenuItem的了,已经解决了,UDF里面实在是不晓得怎么弄,越搞越复杂。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-3 00:23 , Processed in 0.082173 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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