rt...假设有个菜单本来开着,但却因使用者无故Click了其他软件...
又假设有个菜单开着,且需要让form随时知道它是否仍然开着...谢谢各位大侠的指点~

解决方案 »

  1.   

    如上图。不是"父窗口和子窗口"~是指popupmenu的menu...menu.visible--->显示与否
    menu.enable--->致能与否
    menu.?? --->是否还"开着"(还能看到)我来自台湾,电脑用语或有不同,还请包涵...
    谢谢各位的指点~
      

  2.   

    http://1.bp.blogspot.com/_unlRXsH-pcQ/SUmzNklvvzI/AAAAAAAAAAM/1TT2nzCNbEw/s1600-h/aa.bmp
      

  3.   

    如果是主菜单,可以考虑用 Visible 来使它看不见,那可以用 menuname.visible 来判断它是否“开着”。
      

  4.   

    如果是弹出式菜单,仍可以在窗体的 Form_Activate() 事件或 Form_Deactivate() 事件或你所想要的事件中用 submenu.visible 属性来监测它是否开着。因为不论菜单是否打开,菜单程序总是存在的,它是否可见的设置完全在于它的 Visible 属性。
      

  5.   

    不行呀...?(没有向下展开着) Visble总是True....
      

  6.   

    可能有些误会...我是指窗体上边,那横条的menu(功能表)~~按下会向下展开,有许多选项的那个menu....
      

  7.   

    之前回答过这个问题:
    要实现确定菜单是否激活,应该用Windows消息。
    WM_ENTERMENULOOP,进入菜单消息循环(即菜单显示出来)
    WM_EXITMENULOOP,退出菜单消息循环
    另外,在菜单将要显示之前(还没看得见,但是正在内部作初始化),还有两个消息:
    WM_INITMENUPOPUP,将要显示弹出菜单
    WM_INITMENU,将要显示主菜单原帖:
    http://topic.csdn.net/u/20081211/08/58f1770d-6a70-4715-b625-724826693503.html
      

  8.   

    如果是click,click其它软件菜单就自动收回了.快捷键则不收回.
      

  9.   

    楼主说的“开着”就是指菜单当前正在显示(就是能看见)吧?
    就如同12和13楼说的,用子类处监视那几个消息即可。
    注意要先获得菜单句柄,这个用GetMenu和GetSubMenu函数。
      

  10.   

    谢谢各位热心回答!!哇 我程度很差,正在学习"getmessage API"...甚是"子类"呀? Class?
      

  11.   

    Private Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long
    Private Type POINTAPI
            x As Long
            y As Long
    End Type
    Private Type MSG
        hwnd As Long
        message As Long
        wParam As Long
        lParam As Long
        time As Long
        pt As POINTAPI
    End Type
    Const WM_INITMENUPOPUP As Long = 117&Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
    Dim a_msg As MSG
    Dim a As LongPrivate Sub Command1_Click()
        Timer1.Interval = 500
        Timer1.Enabled = Not Timer1.Enabled
    End SubPrivate Sub Timer1_Timer()
        DoEvents
        Dim hm As Long
         hm = GetMenu(Me.hwnd)
        
        Debug.Print hm
        
            a_msg.hwnd = hm
            a_msg.message = WM_INITMENUPOPUP
            
            a = GetMessage(a_msg, Me.hwnd, 0, 0)
        
        Debug.Print a
    End Sub不行呀... 我对API完全不了解...好心的大侠帮我改下... 谢谢!!