一些例子
'Download the full source+pictures+.. At http://www.geocities.com/SiliconValley/Campus/3636/bitmenu.zip
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
Const MF_BITMAP = 4
Const MF_CHECKED = 8
Private Sub Form_Load()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    Dim hMenu As Long, hSubMenu As Long, lngID As Long    'Get the handle of the form's menu
    hMenu = GetMenu(Me.hWnd)
    'Get the handle of the form's submenu
    hSubMenu = GetSubMenu(hMenu, 0)    'Change first item (index=0)
    picBitmaps(0).Picture = picBitmaps(0).Image
    lngID = GetMenuItemID(hSubMenu, 0)
    Call ModifyMenu(hMenu, lngID, MF_BITMAP, lngID, CLng(picBitmaps(0).Picture))    'Change second item (index=1)
    picBitmaps(1).Picture = picBitmaps(1).Image
    lngID = GetMenuItemID(hSubMenu, 1)
    Call ModifyMenu(hMenu, lngID, MF_BITMAP, lngID, CLng(picBitmaps(1).Picture))    'Change third item (index=2)
    picBitmaps(2).Picture = picBitmaps(2).Image
    lngID = GetMenuItemID(hSubMenu, 2)
    Call ModifyMenu(hMenu, lngID, MF_BITMAP, lngID, CLng(picBitmaps(2).Picture))    mnuBitmap1.Checked = True
End Sub
Private Sub mnuBitmap1_Click()
    mnuBitmap1.Checked = Not mnuBitmap1.Checked
End Sub
Private Sub mnuBitmapEnd_Click()
    End
End Sub

解决方案 »

  1.   

    可以参考的几个函数
    【函数】
    GetMenuItemInfo【库名】
    user32【操作系统】
    Win9X:Yes
    WinNT:No【声明】
    Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Long, lpMenuItemInfo As MENUITEMINFO) As Long【说明】  用一个MENUITEMINFO结构取得(接收)与一个菜单条目有关的特定信息 【返回值】  Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError 【其它】
    【参数表】
      hMenu ----------  Long,菜单的句柄  un -------------  Long,菜单条目的菜单ID或位置  b --------------  Boolean,如un指定的是条目位置,就为TRUE;如指定的是一个菜单ID,则为FALSE  lpMenuItemInfo -  MENUITEMINFO,这个结构用于装载请求的信息【函数】
    SetMenuItemInfo【库名】
    user32【操作系统】
    Win9X:Yes
    WinNT:No【声明】
    Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long【说明】  为一个菜单条目设置指定的信息,具体信息保存于MENUITEMINFO结构中 【返回值】  Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError 【其它】
    【参数表】
      hMenu ----------  Long,菜单句柄  un -------------  Long,菜单条目的菜单ID或位置  bool -----------  Boolean,如un指定了条目的位置,就为TRUE;如指定的是菜单ID,就为FALSE  lpcMenuItemInfo -  MENUITEMINFO,用于设置目标菜单条目的特征
      

  2.   


    我一个程序里面的例子(菜单靠最右)'菜单往右
    Private Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal Bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long
    Private Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Long, lpMenuItemInfo As MENUITEMINFO) As Long
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
    '设置菜单
    Dim Menu_Info As MENUITEMINFO
    Menu_Info.cbSize = Len(Menu_Info) '44
    Menu_Info.fMask = 16
    Menu_Info.cch = 128
    Menu_Info.dwTypeData = VBA.String$(128, VBA.Chr$(0))
    GetMenuItemInfo GetMenu(MainForm.hwnd), 4, True, Menu_Info
    'MsgBox Menu_Info.fType
    Menu_Info.fType = 16384
    SetMenuItemInfo GetMenu(MainForm.hwnd), 4, True, Menu_Info
    DrawMenuBar GetMenu(MainForm.hwnd)