Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Intermediate
Dec 9, 2000

SetMenuBitmap - Add a bitmap to a menu item

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 SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, _
    ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As _
    Long, ByVal hBitmapChecked As Long) As Long
Private Const MF_BYPOSITION = &H400&

' add a bitmap to a menu item
'
' The first two arguments can be the Picture property
' of a PictureBox control, or the result from a LoadPicture
' function. If CheckedPicture is Nothing, the first Picture is
' used both for the unchecked and checked status.
' To remove a menu picture, use Nothing for both arguments
'
' Warning: Use the GetSystemMetrics function with the
' CXMENUCHECK and CYMENUCHECK values to retrieve the bitmap
' dimensions. (Typical max size is 13x13 pixels.)
' Bitmaps larger than this size make this function fail.
'
' The third argument is the hWnd of the form
'
' All the arguments from the 4th one onward serve to
' identify which menu should be assigned the bitmap.
' For example, the following statement assign the bitmap in
' Picture1 to the 3rd menu item of the 2nd submenu
' (note that menu indexes are zero-based)
'     SetMenuBitmap Picture1, Nothing, Me.hWnd, 1, 2

Sub SetMenuBitmap(Picture As StdPicture, CheckedPicture As StdPicture, _
    ByVal hWnd As Long, ParamArray menuPos() As Variant)
    Dim hMenu As Long
    Dim id As Long
    Dim i As Long
    Dim chkPicture As StdPicture
    
    ' provide a value for the CheckedPicture
    If CheckedPicture Is Nothing Then
        Set chkPicture = Picture
    Else
        Set chkPicture = CheckedPicture
    End If
    
    ' get the handle of the toplevel menu
    hMenu = GetMenu(hWnd)
    
    ' all the values in menuPos() except the last one
    ' are indexes of submenus
    For i = 0 To UBound(menuPos) - 1
        hMenu = GetSubMenu(hMenu, menuPos(i))
    Next
    
    ' the last element in the paramarray is the
    ' index of a menu item
    If Picture Is Nothing Then
        SetMenuItemBitmaps hMenu, menuPos(UBound(menuPos)), MF_BYPOSITION, 0, 0
    Else
        SetMenuItemBitmaps hMenu, menuPos(UBound(menuPos)), MF_BYPOSITION, _
            Picture.Handle, chkPicture.Handle
    End If
End Sub
Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date