Click to See Complete Forum and Search --> : Puting Bitmap in MenuItem


mpbalshetwar
April 4th, 2001, 09:37 AM
HI All,
Please help in puting bitmap in the MenuItem, although I tried using the API ModifyMenu but it doesn't work in VB 6.0 .

shree
April 4th, 2001, 09:50 AM
Try using SetMenuItemBitmaps() API


public Function AddMenuImage(pForm as Form, byval pMenuNum as Long, byval pMenuItemNum as Long, byval pImageHandle as Long) as Boolean
Dim lngMenuHandle as Long
Dim lngSubMenuHandle as Long
Dim lngRet as Long

AddMenuImage = false

'get a handle to the form's menu
lngMenuHandle = GetMenu(pForm.hwnd)
If lngMenuHandle = 0 then Exit Function

'get a handle to the top level menu using its position
lngSubMenuHandle = GetSubMenu(lngMenuHandle, pMenuNum)
If lngSubMenuHandle = 0 then Exit Function

'Place the Bitmap on the menu
lngRet = SetMenuItemBitmaps(lngSubMenuHandle, pMenuItemNum, MF_BITMAP Or MF_BYPOSITION, pImageHandle, pImageHandle)
AddMenuImage = lngRet
End Function

mpbalshetwar
April 4th, 2001, 12:22 PM
Hi Shree,
Actually I had tried but again it is not working. Will you please describe all the parameters being passed to the function AddMenuImage. So that it will be easy for me to try it out at my end.
Thanking you.

shree
April 4th, 2001, 12:31 PM
It is a working piece of code from one of my applications. Here's a particular example of my calling it:

Call AddMenuImage(MDIMain, 0, 4, imgLMenuBmp.ListImages(3).Picture.Handle)

In general, in

Public Function AddMenuImage(pForm As Form, ByVal pMenuNum As Long, ByVal pMenuItemNum As Long, ByVal pImageHandle As Long) As Boolean

the first parameter is the form containing the menu that you want to modify, pMenuNum is the top level menu number, for instance, you would have 0 for File and 1 for Edit and so on.
The pMenuItemNum is the menu item number in the sub menu. For instance, New would have zero, and Open would have 1 and so on, in most cases.

pImageHandle is the handle to the image you want to pue. In my application, I take the bitmap out of an ImageList. You could use Image1.Picture.Handle instead.

mpbalshetwar
April 4th, 2001, 12:43 PM
Hi Shree,
"lngRet" I am geting value 0 which according to MSDN is failing the function. And also I tried to do as you directed. I think if you do not have problem then you just add me in your MSN so that we will be able to chat. my hotmail Id is mpbalshetwar@hotmail.com. Please help me.

Thanking You.

Iouri
April 4th, 2001, 12:55 PM
' API stuff for putting bitmaps in menus.
Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wid As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As Long
cch As Long
End Type

Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bypos As Long, lpcMenuItemInfo As MENUITEMINFO) As Long

Private Const MF_BITMAP = &H4&
Private Const MFT_BITMAP = MF_BITMAP
Private Const MIIM_TYPE = &H10

Private Sub Form_Load()
Dim main_menu As Long
Dim sub_menu As Long
Dim menu_info As MENUITEMINFO
Dim i As Integer

main_menu = GetMenu(hwnd)
sub_menu = GetSubMenu(main_menu, 0)
For i = 0 To 2
With menu_info
.cbSize = Len(menu_info)
.fMask = MIIM_TYPE
.fType = MFT_BITMAP
.dwTypeData = picFace(i).Picture
End With
SetMenuItemInfo sub_menu, i, True, menu_info
Next i
End Sub




Iouri Boutchkine
iouri@hotsheet.com

mpbalshetwar
April 5th, 2001, 08:36 AM
Although I am geting bitmaps in the menuitems but i am not geting caption along with it. I don't get where that caption is vanishing.

Thanking you.