我用菜单编辑器做的菜单,如何在菜单各项前面加图片?

解决方案 »

  1.   

    菜单编辑器做不了,写代码修改Menu吧,使用APIBOOL ModifyMenu(
      HMENU hMnu,       // handle to menu
      UINT uPosition,   // menu item to modify
      UINT uFlags,      // menu item flags
      UINT uIDNewItem,  // menu item identifier or handle to drop-down 
                        // menu or submenu
      LPCTSTR lpNewItem // menu item content
    );
      

  2.   

    可以使用API函数SetMenuItemBitmaps来为菜单项添加位图。调用该函数时需要用到弹出菜单的句柄,以及要添加的位图。    弹出菜单的句柄可以使用API函数GetMenu与GetSubMenu来获得。位图则可以通过在窗体上放置图像框控件来提供。Option Explicit
    Private Declare Function GetMenu Lib "user32" _
       (ByVal hwnd As Long) As LongPrivate Declare Function GetSubMenu Lib "user32" _
       (ByVal hMenu As Long, ByVal nPos As Long) As LongPrivate Declare Function SetMenuItemBitmaps Lib "user32" _
       (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _
        ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As LongConst MF_BYPOSITION = &H400&Private Sub Form_Load()
        Dim mHandle As Long, lRet As Long, sHandle As Long, sHandle1 As Long
        '获得菜单的句柄
        mHandle = GetMenu(hwnd)
        '获得“文件”菜单的句柄
        sHandle = GetSubMenu(mHandle, 0)
        '为“打开”菜单项添加位图
        lRet = SetMenuItemBitmaps _
        (sHandle, 0, MF_BYPOSITION, imOpen.Picture.Handle, imOpen.Picture.Handle)
        '为“保存”菜单项添加位图
        lRet = SetMenuItemBitmaps _
        (sHandle, 1, MF_BYPOSITION, imSave.Picture, imSave.Picture)
        '为“打印”菜单项添加位图
        lRet = SetMenuItemBitmaps _
        (sHandle, 3, MF_BYPOSITION, imPrint.Picture, imPrint.Picture)
        '获得“其他”菜单的句柄
        sHandle = GetSubMenu(mHandle, 1)
         '获得“帮助”子菜单的句柄
        sHandle1 = GetSubMenu(sHandle, 0)
        '为“内容”菜单项添加位图
        lRet = SetMenuItemBitmaps _
        (sHandle1, 0, MF_BYPOSITION, imContent.Picture, imContent.Picture)
    End Sub