我在一个窗体中有个菜单.每次要根据不同的行为动态的在某一个菜单中添加一个子菜单

解决方案 »

  1.   

    以下是ms的一段代码,但是有一个问题,MainMenu好像是vb.net中的东西。
    我目前还不清楚怎么在vb6中用。是不是要引什么包进来?Public Sub CreateMyMainMenu()
        ' Create an empty MainMenu.
        Dim mainMenu1 As New MainMenu()
           
        Dim menuItem1 As New MenuItem()
        Dim menuItem2 As New MenuItem()
           
        menuItem1.Text = "File"
        menuItem2.Text = "Edit"
        ' Add two MenuItem objects to the MainMenu.
        mainMenu1.MenuItems.Add(menuItem1)
        mainMenu1.MenuItems.Add(menuItem2)
           
        ' Bind the MainMenu to Form1.
        Menu = mainMenu1
    End Sub
      

  2.   

    动态创建菜单,鼠标右键弹出菜单,执行对应鼠标事件
    '窗体
    Option Explicit
    Private Sub Form_Load()
        hMenu = CreateMenu()
        hmenupopup = CreatePopupMenu()
        result = AppendMenu(hmenupopup, MF_STRING, 300, "&New")
        result = AppendMenu(hmenupopup, MF_STRING, 301, "&Save")
        result = AppendMenu(hmenupopup, MF_STRING, 302, "Save &As...")
        result = AppendMenu(hMenu, MF_POPUP, hmenupopup, "&File")
        oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
        SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf OnMenu
    End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        Dim r As RECT
        Dim p As POINTAPI
        If Button = vbRightButton Then
            GetCursorPos p
            TrackPopupMenu hmenupopup, 0, p.x, p.y, 0, Me.hWnd, r
        End If
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        SetWindowLong Me.hWnd, GWL_WNDPROC, oldwinproc
    End Sub
    '模块
    Option ExplicitPublic Declare Function CreateMenu Lib "user32" () As Long
    Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
    Public Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hWnd As Long, lprc As RECT) As Long
    Public Declare Function CreatePopupMenu Lib "user32" () As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function CallWindowProc Lib "user32" 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Public Const MF_STRING = &H0&
    Public Const MF_POPUP = &H10&
    Public Const WM_USER = &H400
    Public Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type
    Public Type POINTAPI
            x As Long
            y As Long
    End Type
    Public Const GWL_WNDPROC = (-4)
    Public hMenu As Long
    Public hmenupopup As Long
    Public result As Long
    Public oldwinproc As Long
    Public Const WM_COMMAND = &H111Public Function OnMenu(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case wMsg
            Case WM_COMMAND
                Select Case wParam
                    Case 300
                        MsgBox "u select new", vbInformation, "hello, world!"
                    Case 301
                        MsgBox "u select save", vbInformation, "hello, world!"
                    Case 302
                        MsgBox "u select save as", vbInformation, "hello, world!"
                End Select
        End Select
        OnMenu = CallWindowProc(oldwinproc, hWnd, wMsg, wParam, lParam)
    End Function