Ton code marche parfaitement, j'ai trouvé sur RsBasic un callback pour tester si on sort du menu :
Code : Tout sélectionner
EnableExplicit
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_UNINITMENUPOPUP
Debug "Menü wurde geschlossen."
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateMenu(1, WindowID(0))
MenuTitle("File")
MenuItem(1, "New")
MenuItem(2, "Open")
MenuItem(3, "Save")
MenuItem(4, "Close")
EndIf
SetWindowCallback(@WinCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
J'ai essayé de changer de callback : quand tu détectes un clic sur le titre, je bascule sur son callback, mais ça ne marche pas non plus ?
Code : Tout sélectionner
EnableExplicit
Procedure MyCallBack(hwnd, msg, wparam, lparam)
Protected result = #PB_ProcessPureBasicEvents
If msg = #WM_INITMENUPOPUP
Select lparam
Case 0
Debug "Click Menu fichier"
Case 1
Debug "Click A propos"
EndSelect
EndIf
ProcedureReturn result
EndProcedure
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_UNINITMENUPOPUP
Debug "Menü wurde geschlossen."
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 800, 600, "Exemple menu")
SetWindowCallback(@MyCallBack())
UsePNGImageDecoder()
If CreateImageMenu(0, WindowID(0))
MenuTitle("Fichier")
MenuItem(1, "Ouvre" +Chr(9)+"Ctrl+O", LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/ToolBar/Open.png"))
MenuItem(2, "Enregistrer sous ..." +Chr(9)+"Ctrl+S", LoadImage(1, #PB_Compiler_Home + "examples/sources/Data/ToolBar/Save.png"))
MenuBar()
MenuItem(3, "Quitter" +Chr(9)+"Ctrl+Q")
MenuTitle("A propos")
MenuItem(4, "De moi")
MenuItem(5, "Me soutenir")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Debug "-Click item " + GetMenuItemText(0, EventMenu())
SetWindowCallback(0 ,0) ; change de callback
SetWindowCallback(@WinCallback())
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf