Basic Univers
; Auteur : Le Soldat Inconnu
; Version de PB : 3.92
;
; Explication du programme :
; Ajouter des éléments dans le SystemMenu
; Le SystemMenu est le menu qui apparait quand on fait clic droit sur le bouton du programme dans la barre des tâches.

; Ce code montre comment ajouter des éléments et des séparations


#MIIM_SUBMENU = 4
#MIIM_TYPE    = 16

Procedure WindowCallback(WindowID, message, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select message
    Case #WM_SYSCOMMAND
      Select wParam
        Case 20
          MessageRequester("Info", "Menu 1", 0)
         
        Case 21
          MessageRequester("Info", "Menu 2", 0)

        Case 111
          MessageRequester("Info", "Sous-Menu 111", 0)

        Case 112
          MessageRequester("Info", "Sous-Menu 112", 0)
      EndSelect
     
  EndSelect
  ProcedureReturn result
EndProcedure


; on ouvre une fenêtre avec un SystemMenu
OpenWindow(0, 200, 200, 200, 200, #PB_Window_SystemMenu, "SystemMenu")

; On récupère le handle du SystemMenu
SysMenu = GetSystemMenu_(WindowID(), #False)

DefType.MENUITEMINFO MenuInfo
MenuInfo\cbSize = SizeOf(MENUITEMINFO)
MenuInfo\fmask = $2 | $40

; On insert une séparation
MenuInfo\fType = #MFT_SEPARATOR
InsertMenuItem_(SysMenu, 5, #MF_BYPOSITION, MenuInfo)
; Le 5 correspond à la position dans le menu

; On insert un élément dans le SystemMenu
MenuInfo\fType = #MFT_STRING
MenuInfo\fState = #MFS_DEFAULT
MenuInfo\wID = 20 ; ID du menu
Texte.s = "Menu 1" ; Texte de l'élément
MenuInfo\dwTypeData = @Texte
MenuInfo\cch = Len(Texte) + 1
InsertMenuItem_(SysMenu, 6, #MF_BYPOSITION, MenuInfo)
; Le 6 correspond à la position dans le menu

;******************************************
;******************************************
; On insert un sous-menu
PopupMenu11 = CreatePopupMenu_()
; ajoute un élément au sous-menu car CreatePopupMenu_() cré un sous-menu vide

Texte.s = "Menu 11" ; Texte de l'élément
AppendMenu_(SysMenu, #MF_STRING|#MF_POPUP   , PopupMenu11, Texte.s)
DrawMenuBar_(PopupMenu11)
; On insert un élément dans le sous-menu
MenuInfo\fType = #MFT_STRING
MenuInfo\fState = #MFS_DEFAULT
MenuInfo\wID = 111 ; ID du sous-menu
Texte.s = "Sous-Menu 111" ; Texte de l'élément
MenuInfo\dwTypeData = @Texte
MenuInfo\cch = Len(Texte) + 1
InsertMenuItem_(PopupMenu11, 1, #False, MenuInfo)
Texte.s = "Sous-Menu 112" ; Texte de l'élément
MenuInfo\wID = 112 ; ID du sous-menu
MenuInfo\dwTypeData = @Texte
MenuInfo\cch = Len(Texte) + 1
InsertMenuItem_(PopupMenu11, 2, #False, MenuInfo)


;******************************************
;******************************************


MenuInfo\fmask = $2 | $40

; On insert un élément dans le SystemMenu
MenuInfo\fType = #MFT_STRING
MenuInfo\fState = #MFS_DEFAULT
MenuInfo\wID = 21 ; ID du menu
Texte.s = "Menu 2" ; Texte de l'élément
MenuInfo\dwTypeData = @Texte
MenuInfo\cch = Len(Texte) + 1
InsertMenuItem_(SysMenu, 7, #MF_BYPOSITION, MenuInfo)
; Le 7 correspond à la position dans le menu


hmenupopup = CreatePopupMenu(10)
If hmenupopup
MenuItem(1, "Open")
MenuItem(2, "Save")
MenuItem(3, "Save as")
MenuItem(4, "Quit")
EndIf

InsertMenu_(SysMenu, 8, #MF_POPUP | #MF_BYPOSITION, hmenupopup, "menu 3")

SetWindowCallback(@WindowCallback())

Repeat
  Event = WindowEvent()

Until Event = #WM_CLOSE