找回密码
 加入
搜索
查看: 4466|回复: 8

[GUI管理] 关于$WM_COMMAND消息的一个问题

  [复制链接]
发表于 2013-4-2 22:01:19 | 显示全部楼层 |阅读模式
以下代码为函数_GUICtrlMenu_CreatePopup 的示例代码,我就加了一个按钮(红色部分),于是问题来了。如果在其他地方点右键,并在右键菜单中选择一项,都会产生一个WM_COMMAND消息,但是在那个按钮上点右键并在右键菜单中选择一项,就不会产生WM_COMMAND消息了。请高手指点一下如何解决这个问题,即如何响应某个控件的右键菜单项。(不是用GUICtrlCreateContextMenu 函数创建的右键菜单)
#include <GuiMenu.au3>
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

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

_Main()

Func _Main()
    Local $hGUI

    ; 创建界面
    $hGUI = GUICreate("Menu", 400, 300)
    GUICtrlCreateButton("test",10,10,50,30)   
    GUISetState()

    ; 注册消息句柄
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")

    ; 循环至用户退出
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main

; WM_COMMAND消息的句柄
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        MsgBox(0,"","into")
    Switch $iwParam
        Case $idOpen
            _WinAPI_ShowMsg ("Open")
        Case $idSave
            _WinAPI_ShowMsg ("Save")
        Case $idInfo
            _WinAPI_ShowMsg ("Info")
    EndSwitch
EndFunc   ;==>WM_COMMAND

; WM_CONTEXTMENU消息的句柄
Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $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
 楼主| 发表于 2013-4-2 22:30:19 | 显示全部楼层
自己顶一个先
发表于 2013-4-2 22:54:42 | 显示全部楼层
捕捉WM_LBUTTONDOWN及WM_LBUTTONUP,判断wParam是否为MK_RBUTTON
发表于 2013-4-2 23:02:51 | 显示全部楼层
_GUICtrlMenu_TrackPopupMenu ($hMenu, $hWnd)
 楼主| 发表于 2013-4-3 13:35:45 | 显示全部楼层
回复 3# ceoguang


如果这样的话,就会搞混了吧?直接点那个按钮的消息也会被捕捉到了
我要的效果是直接点那个按钮的消息和在那个按钮上选择右键菜单的消息区别开,不知道这样说你明白吗....
 楼主| 发表于 2013-4-3 14:21:09 | 显示全部楼层
回复 3# ceoguang

你的是不是这个意思?把GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
改为:GUIRegisterMsg($WM_LBUTTONDOWN, "WM_COMMAND") ???

还是不行啊
发表于 2013-4-3 17:08:38 | 显示全部楼层
楼上高手太高深了
 楼主| 发表于 2013-4-4 15:06:08 | 显示全部楼层
自己顶一下
发表于 2013-4-4 16:19:01 | 显示全部楼层
4#的回复被楼主兄华丽地无视了,难道是我理解错了吗?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 15:41 , Processed in 0.080803 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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