找回密码
 加入
搜索
查看: 6361|回复: 4

[GUI管理] [已解决]弹出式菜单打开另一个GUI的问题

[复制链接]
发表于 2013-1-29 11:25:16 | 显示全部楼层 |阅读模式
本帖最后由 bsbq 于 2013-1-30 23:12 编辑

我期望的功能描述:点击鼠标右键,弹出菜单,选择菜单项Open,打开另一个GUI界面操作
代码是帮助中2个例子的合成,但打开Example后,就死循环。
我的判断是问题出在有2个消息循环,但不知如何解决
#include <GuiMenu.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

Global Enum $idOpen = 1000, $idSave, $idInfo

_Main()

Func _Main()
    ; Create GUI
    GUICreate("Menu", 400, 300)
    GUISetState()

    ; Register message handlers
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main

; Handle WM_COMMAND messages
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $ilParam
    Switch $iwParam
        Case $idOpen
            Example()
        Case $idSave
            _WinAPI_ShowMsg("Save")
        Case $idInfo
            _WinAPI_ShowMsg("Info")
    EndSwitch
EndFunc   ;==>WM_COMMAND

; Handle WM_CONTEXTMENU messages
Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $ilParam
    Local $hMenu

    $hMenu = _GUICtrlMenu_CreatePopup()
    _GUICtrlMenu_InsertMenuItem($hMenu, 0, "Open", $idOpen)
    _GUICtrlMenu_InsertMenuItem($hMenu, 1, "Save", $idSave)
    _GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
    _GUICtrlMenu_InsertMenuItem($hMenu, 3, "Info", $idInfo)
    _GUICtrlMenu_TrackPopupMenu($hMenu, $iwParam)
    _GUICtrlMenu_DestroyMenu($hMenu)
    Return True
EndFunc   ;==>WM_CONTEXTMENU

Func Example()
    Local $radio1, $radio2, $msg
    GUICreate("My GUI radio") ; will create a dialog box that when displayed is centered

    $radio1 = GUICtrlCreateRadio("Radio 1", 10, 10, 120, 20)
    $radio2 = GUICtrlCreateRadio("Radio 2", 10, 40, 120, 20)
    GUICtrlSetState($radio2, $GUI_CHECKED)

    GUISetState() ; will display an  dialog box with 1 checkbox

    ; Run the GUI until the dialog is closed
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                ExitLoop
            Case $msg = $radio1 And BitAND(GUICtrlRead($radio1), $GUI_CHECKED) = $GUI_CHECKED
                MsgBox(64, 'Info:', 'You clicked the Radio 1 and it is Checked.')
            Case $msg = $radio2 And BitAND(GUICtrlRead($radio2), $GUI_CHECKED) = $GUI_CHECKED
                MsgBox(64, 'Info:', 'You clicked on Radio 2 and it is Checked.')
        EndSelect
    WEnd
EndFunc   ;==>Example
发表于 2013-1-29 11:29:45 | 显示全部楼层
多窗口用消息模式比较好
发表于 2013-1-30 20:42:57 | 显示全部楼层
路过。。。。。
 楼主| 发表于 2013-1-30 23:11:22 | 显示全部楼层
仔细读了帮助中GUI Reference
对于多窗口MessageLoop mode和OnEvent mode都可以实现
算是解决了吧
发表于 2013-1-30 23:19:00 | 显示全部楼层
用消息的话,在lz这个代码中要指定$hwnd,切换对应窗体句柄才行
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-14 16:45 , Processed in 0.080372 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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