Code: Select all
; --> get default menu check-mark bitmap size
menuImageWidth = GetSystemMetrics_(#SM_CXMENUCHECK)
menuImageHeight = GetSystemMetrics_(#SM_CYMENUCHECK)
#MIIM_CHECKMARKS = 8
Structure myMENUITEMINFO
cbSize.l
fMask.l
fType.l
fState.l
wID.l
hSubMenu.l
hbmpChecked.l
hbmpUnchecked.l
dwItemData.l
dwTypeData.l
cch.l
hbmpItem.l
EndStructure
myMenu.myMENUITEMINFO
myMenu\cbSize = SizeOf(myMENUITEMINFO)
myMenu\fMask = #MIIM_CHECKMARKS
Global myMenu, menuImageWidth, menuImageHeight
Procedure menuImage(subMenu, iID, ico)
; --> Extract an icon
ExtractIconEx_("shell32.dll", ico, 0, @smIcons, 1)
; --> Draw the icon onto a 16 x 16 blank image
CreateImage(iID, 16, 16)
himg = StartDrawing(ImageOutput())
; --> White background to match menu background
Box(0, 0, 16, 16, RGB(255, 255, 255))
; --> Draw the icon
DrawImage(smIcons, 0, 0, 16, 16)
StopDrawing()
; --> Resize to fit the menu
itemImage = ResizeImage(iID, menuImageWidth, menuImageHeight)
; --> Add the image to myMENUITEMINFO structure
myMenu\hbmpUnchecked = itemImage
; --> Send the info to the menu item
SetMenuItemInfo_(subMenu, iID, 0, myMenu)
; --> Clean up
DestroyIcon_(smIcons)
EndProcedure
If OpenWindow(0, 200, 200, 400, 110, #PB_Window_SystemMenu, "Set Menu Item Images") And CreateGadgetList(WindowID(0))
hMenu = CreateMenu(0, WindowID())
MenuTitle("Title 1")
MenuItem(0, "Testing 1")
MenuItem(1, "Testing 2")
MenuItem(2, "Testing 3")
MenuTitle("Title 2")
MenuItem(3, "Testing 4")
MenuItem(4, "Testing 5")
MenuItem(5, "Testing 6")
; --> Set images for Title 1 sub items
hsMenu0 = GetSubMenu_(hMenu, 0)
menuImage(hsMenu0, 0, 4)
menuImage(hsMenu0, 1, 130)
menuImage(hsMenu0, 2, 194)
; --> Set images for Title 2 sub items
hsMenu1 = GetSubMenu_(hMenu, 1)
menuImage(hsMenu1, 3, 43)
menuImage(hsMenu1, 4, 10)
menuImage(hsMenu1, 5, 90)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
End