有个菜单,每个里面都有2-3级菜单
我想:在我单击主界面的某一个菜单时,都可以知道单击的是哪个菜单

解决方案 »

  1.   

    你只要为这些菜单编写click事件就可以触发了,
    这些click事件不仅仅你首次点击菜单回出发,当你开着一个菜单在菜单条上来回移动鼠标时都会出发各自的click事件,非常方便。注意
    有子菜单的菜单(比如主菜单)的事件编写法不是通过双击那个菜单来实现的而是要到代码编辑器里通过选择上面的两个下拉列表框来得到
      

  2.   

    只要为这些菜单编写click事件就可以触发了,
      

  3.   

    我要是有很多菜单,那岂不是要编写很多的click事件了?
    我现在想要只写一个函数(过程)就可以解决这问题
    还望赐教!
      

  4.   

    在创建菜单时使用菜单数组,取给主菜单同样得名字,每次写得时候别忘了填上不同得Index(索引)值,这样在编辑click事件里面就会有一个index变量,里面根据菜单得不同给出不同得索引值
      

  5.   

    没有别的方法吗?
    用API可以实现吗?
    谁给我说说啊
      

  6.   

    Option ExplicitPrivate Sub Form_Load()
        hMenu = GetMenu(Me.hwnd)
        PrevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf SubWndProc
    End Sub'in a module
    Option ExplicitPublic Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function GetMenu Lib "user32.dll" (ByVal hwnd As Long) As Long
    Public Declare Function GetMenuString Lib "user32.dll" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As LongPublic Const GWL_WNDPROC As Long = -4
    Private Const WM_COMMAND As Long = &H111Public PrevWndProc As Long
    Public hMenu As LongPublic Function SubWndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Dim menuCaption As String
        Dim length As Long
      
        If msg = WM_COMMAND Then
            menuCaption = String(256, Chr(0))
            length = GetMenuString(hMenu, wParam, menuCaption, Len(menuCaption), 0&)
            Debug.Print Left$(menuCaption, length)
        End If
        SubWndProc = CallWindowProc(PrevWndProc, hwnd, msg, wParam, lParam)
       
    End Function
      

  7.   

    使用菜单数组,通过click事件触发。
      

  8.   

    非常简单的问题何必要搬出一大堆api来呢
    除非你要在拦截移动项目的事件才需要用到嘿嘿 用了子类调试的时候等着vb挂掉吧