En résumé, c'est la simple utilisation d'un message:WM_MENUSELECT
Exemple avec menu et popup:
Code : Tout sélectionner
Global HdleMenu.l,hdlePopupMenu.l
Procedure ProcCallbackMain(WindowID, Message, wParam, lParam) 
  Resultat = #PB_ProcessPureBasicEvents 
  Select Message
    Case #WM_MENUSELECT
      lo = (wParam & $FFFF)
      handleMenu=GetSubMenu_(HdleMenu,0)
       Select lParam
        Case handleMenu
          Select lo 
            Case 1
              StatusBarText(0, 0, "Ouvrir")
            Case 2
              StatusBarText(0, 0, "Enregistrer")
            Case 3
              StatusBarText(0, 0, "Enregistrer sous ...")  
          EndSelect
          
        Case hdlePopupMenu         
          Select lo 
            Case 1
              StatusBarText(0, 0, "Couper")
            Case 2
              StatusBarText(0, 0, "Copier")
            Case 3
              StatusBarText(0, 0, "Coller") 
          EndSelect
          
        Default
              StatusBarText(0, 0, "")   
  EndSelect      
      
  EndSelect      
  
  ProcedureReturn Resultat 
EndProcedure 
If OpenWindow(0, 100, 200, 300, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")
  WindowMain=WindowID()
  HdleMenu.l=CreateMenu(0, WindowID())
  ;Debug HdleMenu
  If HdleMenu
    MenuTitle("Fichier")
    MenuItem( 1, "Ouvrir")
    MenuItem( 2, "Enregistrer")
    MenuItem( 3, "Enregistrer sous ...")
  EndIf
  
  hdlePopupMenu=CreatePopupMenu(1)
  If hdlePopupMenu
    MenuItem( 1, "Couper")
    MenuItem( 2, "Copier")
    MenuItem( 3, "Coller")
  EndIf
  
  If CreateStatusBar(0, WindowID())
    AddStatusBarField(300)
  EndIf
  
EndIf  
 
SetWindowCallback(@ProcCallbackMain()) 
  
Repeat
  EventID.l = WaitWindowEvent()
  Select EventID
    Case #WM_RBUTTONUP
      DisplayPopupMenu(1, WindowID(0) )
      
  EndSelect   
Until EventID=#PB_Event_CloseWindow
End