Mettre un menu m'importe sur la fenêtre et pas en haut
Publié : mar. 10/août/2004 11:39
voila un code qui permet de placer un menu n'importe ou sur le fenêtre
dans cet exemple, je l'ai mis en bas
dans cet exemple, je l'ai mis en bas
Code : Tout sélectionner
#Window = 0
Procedure CreateMenuEx(ID.l, WindowID.l, Position.l)
; ID = Numéro du menu
; WindowID = fenêtre associé au menu
; Position = Position du menu sur la fenêtre
; si -1 : menu en bas de la fenêtre
; si x > 0 : menu décalé de x pixel du haut de la fenêtre
x = WindowWidth()
If Position = -1
Position = WindowHeight() - MenuHeight()
EndIf
NewWindow = OpenWindow(#PB_Any, 0, Position, x, MenuHeight(), #PB_Window_BorderLess, "Menu")
Resultat = CreateMenu(ID, WindowID(NewWindow))
SetWindowLong_(WindowID(NewWindow), #GWL_STYLE, GetWindowLong_(WindowID(NewWindow), #GWL_STYLE) | #WS_CHILD | #WS_CLIPCHILDREN)
SetParent_(WindowID(NewWindow), WindowID(WindowID))
ProcedureReturn Resultat
EndProcedure
Procedure CloseMenuEx(WindowID)
UseWindow(WindowID)
UseGadgetList(WindowID(WindowID))
EndProcedure
OpenWindow(#Window, 0, 0, 200, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #WS_CLIPCHILDREN, "Test")
; ne pas oublier de mettre la constante #WS_CLIPCHILDREN dans les paramètre de la fenêtre
If CreateMenuEx(0, #Window, -1)
MenuTitle("Fichier")
MenuItem(0, "Quitter")
CloseMenuEx(#Window) ; On ferme le menu
EndIf
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventMenu
Select EventMenuID() ; menu et barre d'outils
Case 0
Event = #PB_Event_CloseWindow
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow