Désolé !
Bienvenu Nounours tout d'abord et mille excuses pour ce lien un peu trop garni. C'est une interface graphique qui gère ce que tu demandes. Seulement, comme dit Dobro, elle est complexe.
ça n'est pas une question simple que tu poses. Alors voici un code d'exemple pour te mettre dans le bain.
C'est un simple écran avec 2 carrés rouges. Dès que tu cliques sur le bouton droit de la souris, tu affiches un menu. Voilà.
Code : Tout sélectionner
; Ici, j'indique l'existence des variables qui sont prises en compte dans l'ensemble du code
Global BureauLargeur.L
Global BureauHauteur.L
Global BureauProfeur.L
Global Fenetre.L ; Numéro de la fenêtre qui va supporter le graphisme
; Ici, je déclare l'existence de mes procédures (elles sont après le code principal, plus bas)
; Ce sont des bouts de code qui m'évitent de réécrire tout ce qu'elle contiennent.
Declare PrepareEcran(BureauNo.L)
Declare BouclePrincipale()
Declare Message(Texte$)
; Ici, il y a toutes les constantes
#FenetreSansRebord = $80000000
Enumeration
#ItemNewGame
#ItemLoadGame
#ItemSaveGame
#ItemQuitter
#MenuPrincipal
EndEnumeration
PrepareEcran(0)
BouclePrincipale()
End
Procedure PrepareEcran(BureauNo.L)
; On charge DirectX
InitSprite()
; On charge les commandes du clavier
InitKeyboard()
; On charge les commandes de la souris
InitMouse()
; On interroge le bureau (pour savoir sa taille)
ExamineDesktops()
; On récupère la largeur, la hauteur et la profondeur (nombre de bits par pixel)
BureauLargeur = DesktopWidth(BureauNo)
BureauHauteur = DesktopHeight(BureauNo)
BureauProfeur = DesktopDepth(BureauNo)
; On ouvre une fenêtre de la taille du bureau
Fenetre = OpenWindow(-1, 0, 0, BureauLargeur, BureauHauteur, "", #FenetreSansRebord)
; On active le mode graphique fenêtré
OpenWindowedScreen(WindowID(Fenetre), 0, 0, BureauLargeur, BureauHauteur, 1, 0, 0)
EndProcedure
Procedure BouclePrincipale()
; On indique un déplacement de 8 pixels pour les carrés rouges
BoxDeplacement = 8
xBoxDeplacement = BoxDeplacement
; On crée le menu
CreatePopupMenu(#MenuPrincipal)
MenuItem(#ItemNewGame, "Nouvelle partie")
MenuBar()
MenuItem(#ItemLoadGame, "Charger une partie")
MenuItem(#ItemSaveGame, "Enregistrer la partie en cours")
MenuBar()
MenuItem(#ItemQuitter, "Quitter")
; La boucle commence ici
Repeat
; On met un délai, car d'autres applications peuvent s'exécuter actuellement
; Alors il est bien urbain de leur laisser un peu de temps pour s'exécuter (20ms)
Delay(20)
; On regard les événements
Evenement = WindowEvent()
Select Evenement
; Le bouton droit a-t-il été cliqué ?
Case #WM_RBUTTONDOWN
; Oui, on affiche le menu
DisplayPopupMenu(#MenuPrincipal, WindowID(Fenetre) )
; Un item dans le menu a-t-il été cliqué ?
Case #PB_Event_Menu
; Oui, quel item ?
Select EventMenu()
Case #ItemNewGame
Message("La partie commence ici.")
Case #ItemLoadGame
Message("Ici, on charge une partie")
Case #ItemSaveGame
Message("Ici, on sauve une partie")
Case #ItemQuitter
Quitter = 1
EndSelect
EndSelect
; On efface l'écran
ClearScreen(0)
; On dessine les carrés rouges
StartDrawing(ScreenOutput() )
Box(xBox, 100, 100, 100, #Red)
Box(BureauLargeur - xBox - 100, BureauHauteur - 200, 100, 100, #Red)
xBox + xBoxDeplacement
If xBox > BureauLargeur - 100: xBoxDeplacement = -BoxDeplacement: EndIf
If xBox < 0: xBoxDeplacement = BoxDeplacement: EndIf
StopDrawing()
; On demande à afficher ce qu'on a dessiné
FlipBuffers()
; On examine le clavier
ExamineKeyboard()
; On veut quitter avec la touche Echap ? Ben, on quitter
If KeyboardPushed(#PB_Key_Escape): Quitter = 1: EndIf
Until Quitter
EndProcedure
; Voici un exemple de l'utilité d'une procédure :
; Pour afficher un message,
; au lieu d'écrire «MessageRequester»,
; on pourra écrire juste «message» grâce à cette procédure ci-dessous
Procedure Message(Texte$)
MessageRequester("Message", Texte$)
EndProcedure