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