Just wondering if it was possible at all. Since i have an image on the whole form, and the MenuBar is all grey, i wondered if it was possible to do that.
thanks in advance



Code: Select all
UseJPEGImageDecoder()
#MIM_BACKGROUND = 2  
#MIM_APPLYTOSUBMENUS = $80000000  
Structure myMENUINFO 
  cbSize.l 
  fMask.l 
  dwStyle.l 
  cyMax.l 
  hbrBack.l 
  dwContextHelpID.l 
  dwMenuData.l 
EndStructure 
Global hBrush
; --> Create our menu background
Procedure myMenuBg(hMnu.l, bkImg$, bkColor.l, subMenu)
  ; --> Reset menu to default background
  myMenu.myMENUINFO\cbSize = SizeOf(myMENUINFO)
  GetMenuInfo_(hMnu, @myMenu)
  myMenu\fMask = #MIM_BACKGROUND | #MIM_APPLYTOSUBMENUS
  myMenu\hbrBack = 0
  SetMenuInfo_(hMnu, myMenu) 
  ; --> If there is an image or RGB color, change the menu background
  If bkImg$ <> "" Or bkColor <> -1
    ; --> Load our image 
    If bkImg$ <> ""
      If LoadImage(0, bkImg$) 
        myImg = ImageID()
        If myImg <> 0
          myBrush.LOGBRUSH\lbStyle = #BS_PATTERN
          myBrush.LOGBRUSH\lbHatch = myImg
        EndIf
      EndIf
    EndIf
    ; --> If no image, use RGB color
    If myImg = 0
      myBrush.LOGBRUSH\lbStyle = #BS_SOLID
      myBrush.LOGBRUSH\lbColor = bkColor 
    EndIf
    hBrush = CreateBrushIndirect_(myBrush) 
    ; --> Define menu info 
    If subMenu = 1
      myMenu\fMask = #MIM_BACKGROUND | #MIM_APPLYTOSUBMENUS
    Else
      myMenu\fMask = #MIM_BACKGROUND
    EndIf
    myMenu\hbrBack = hBrush
    SetMenuInfo_(hMnu, myMenu)
    ; --> Free image 0 for other use
    If myImg <> 0
      FreeImage(0)
    EndIf
  EndIf
  ; --> Upadte the menu
  RedrawWindow_(WindowID(), 0, 0, #RDW_INVALIDATE|#RDW_FRAME|#RDW_UPDATENOW)
  ProcedureReturn hBrush
EndProcedure
; --> Reset menu to default background.
Procedure myMenuDefault(hMnu)
  myMenuBg(hMnu, "", -1, 1)
EndProcedure
; --> Clean-up on exit
Procedure myMenu_End()
  DeleteObject_(hBrush)
EndProcedure
If OpenWindow(0, 200, 200, 400, 110, #PB_Window_SystemMenu, "Set Menu Background") And CreateGadgetList(WindowID(0))
  TextGadget(0, 140, 20, 150, 20, "Right-click for Popup menu.")
  ; --> Create a menu and use the returned handle for setting background
  hMenu = CreateMenu(0, WindowID())
  If hMenu <> 0
    MenuTitle("Main Menu") 
    OpenSubMenu("Select Background")
    MenuItem(1, "Choose Color...") 
    MenuItem(2, "Choose Image...")
    CloseSubMenu()
    MenuBar()
    MenuItem(3, "Include Submenus")
    SetMenuItemState(0, 3, 1)
    MenuItem(4, "Reset")
    DisableMenuItem(4, 1)
    MenuTitle("Popup Menu") 
    OpenSubMenu("Select Background")
    MenuItem(5, "Choose Color...") 
    MenuItem(6, "Choose Image...")
    CloseSubMenu()
    MenuBar()
    MenuItem(7, "Include Submenus")
    SetMenuItemState(0, 7, 1)
    MenuItem(8, "Reset")
    DisableMenuItem(8, 1)
  EndIf
  ; --> Create a popup menu and use the returned handle for setting background
  hPop = CreatePopupMenu(1)
  If hPop <> 0
    MenuTitle("Testing")
    MenuItem(9, "Open")
    MenuItem(10, "Save") 
    MenuItem(11, "Save as") 
    MenuItem(12, "Quit") 
    MenuBar() 
    OpenSubMenu("More Testing") 
    MenuItem(13, "Test") 
    MenuItem(14, "Test") 
    CloseSubMenu() 
    MenuItem(15, "Edit") 
    MenuItem(16, "Options") 
  EndIf 
 
  Repeat
    event = WaitWindowEvent()
    Select event
      Case #PB_EventMenu
        Select EventMenuID()
          Case 1
            ; --> Use color for main menu
            menuColor = ColorRequester()
            If menuColor > -1
              menuImage$ = ""
              myMenuBg(hMenu, menuImage$, menuColor, GetMenuItemState(0, 3))
              DisableMenuItem(4, 0)
            EndIf
          Case 2
            ; --> Use image for main menu
            menuImage$ = OpenFileRequester("Choose Main Menu Background", "C:\Windows\", "BMP, JPG, JPEG Image files|*.bmp;*.jpg;*.jpeg", 0)
            If menuImage$ <> ""
              menuColor = -1
              myMenuBg(hMenu, menuImage$, menuColor, GetMenuItemState(0, 3))
              DisableMenuItem(4, 0)
            EndIf
          Case 3
            ; --> Include main menu submenus yes/no
            If GetMenuItemState(0, 3) = 0
              SetMenuItemState(0, 3, 1)
            Else
              SetMenuItemState(0, 3, 0)
            EndIf
            If menuImage$ <> "" Or menuColor <> -1
              myMenuBg(hMenu, menuImage$, menuColor, GetMenuItemState(0, 3))
              DisableMenuItem(4, 0)
            EndIf
          Case 4
            ; --> Reset main menu to deafult background
            myMenuDefault(hMenu)
            menuColor = -1
            menuImage$ = ""
            DisableMenuItem(4, 1)
          Case 5
            ; --> Use color for popup menu
            popColor = ColorRequester()
            If popColor > -1
              popImage$ = ""
              myMenuBg(hPop, popImage$, popColor, GetMenuItemState(0, 7))
              DisableMenuItem(8, 0)
            EndIf
          Case 6
            ; --> Use image for popup menu
            popImage$ = OpenFileRequester("Choose Popup Menu Background", "C:\Windows\", "BMP, JPG, JPEG Image files|*.BMP;*.jpg;*.jpeg", 0)
            If popImage$ <> ""
              popColor = -1
              myMenuBg(hPop, popImage$, popColor, GetMenuItemState(0, 7))
              DisableMenuItem(8, 0)
            EndIf
          Case 7
            ; --> Include popup submenus yes/no
            If GetMenuItemState(0, 7) = 0
              SetMenuItemState(0, 7, 1)
            Else
              SetMenuItemState(0, 7, 0)
            EndIf
            If popImage$ <> "" Or popColor <> -1
              myMenuBg(hPop, popImage$, popColor, GetMenuItemState(0, 7))
              DisableMenuItem(8, 0)
            EndIf
          Case 8
            ; --> Reset popup to deafult background
            myMenuDefault(hPop)
            popColor = -1
            popImage$ = ""
            DisableMenuItem(8, 1)
        EndSelect
      Case #WM_RBUTTONDOWN
        DisplayPopupMenu(1, WindowID())  
    EndSelect
  Until event = #PB_Event_CloseWindow 
  myMenu_End()
EndIf
End

