plein écran et barre de tâches...

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

plein écran et barre de tâches...

Message par jak64 »

Bonjour,
Dans le petit bout de code qui suit, le programme lance en plein écran sans la barre de titre de Windows, c'est voulu. Si on approche la souris du haut de l'écran, la barre de titre apparaît (ce qui permet par exemple de fermer le programme ou de le minimiser) et si on déplace la souris vers la bas, la barre de titre disparaît : c'est ce que je veux afin de pouvoir bénéficier de tout l'écran pour mes programmes de jeu.

Le problème que je rencontre, c'est que la barre de tâches, en bas, apparaît lorsque la souris redéfinie est affichée (petit carré blanc entouré de rouge), c'est à dire quand je rentre dans l'écran de jeu, et je ne voudrais pas que la barre de tâche s'affiche.

Merci de votre aide.

Code : Tout sélectionner

;================================================================================================================================
;= Programme squelette gérant la souris avec une fenêtre OpenWindow() et une fenêtre OpenWindowedScreen()
;================================================================================================================================
EnableExplicit
;---------- Constantes
  #couleur_fond_ecran=$FACE87
  #largeur_ecran=1366
  #hauteur_ecran=768
  #options_ecran=#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered

;---------- Enumérations
  Enumeration
    #fenetre_windows
    #souris
  EndEnumeration
  
;---------- Variables
  Global event.i
  Global souris_dans_ecran_de_jeu.b
  Global mx.w
  Global my.w

  ;---------- Initialisation des environnements nécessaires
  If InitSprite()=0 : MessageRequester("Erreur", "InitSprite() non initialisé !"):End:EndIf
  If InitMouse()=0 : MessageRequester("Erreur", "InitMouse() non initialisé !"):End:EndIf
  
  ;=---------- Création de la fenêtre Windows
  OpenWindow(#fenetre_windows, 0, -26, #largeur_ecran,#hauteur_ecran, "Programme squelette - Jacques Joly (2021)",#options_ecran)
  
  ;=---------- Création de la fenêtre de jeu
  OpenWindowedScreen(WindowID(#fenetre_windows),0,0,#largeur_ecran,#hauteur_ecran,1,0,0) ; le 1=redimensionnement automatique
  CreateSprite(#souris,18,18)
  StartDrawing(SpriteOutput(#souris))
  Box(0,0,18,18,#Red)
  Box(2,2,14,14,#White)
  StopDrawing()
  
Procedure gerer_souris()
  ;=---------- Routine de gestion de la souris qui est soit dans l'écran de jeu, soit sur la fenêtre Windows
  If souris_dans_ecran_de_jeu    ; Si la souris est dans l'écran de jeu
    If MouseX() > #largeur_ecran-2 Or MouseY() > #hauteur_ecran-2  Or MouseX() < 1 Or MouseY() <1 ; ...et si elle s'approche des bords de l'écran
      ReleaseMouse(#True)                                                                         ; ....alors on libère la souris pour la rendre à la fenêtre Windows
      souris_dans_ecran_de_jeu = #False ; ... et on indique que q'elle n'est plus dans l'écran de jeu
      If MouseY() <1
        ResizeWindow(#fenetre_windows,#PB_Ignore,0,#PB_Ignore,#PB_Ignore)
      EndIf 
    EndIf  
  Else ; Sinon, c'est qu'elle est dans l'écran Windows                    
    mx = WindowMouseX(#fenetre_windows)  ; ... on récupère les coordonnées de la souris    
    my = WindowMouseY(#fenetre_windows)
    If mx < #largeur_ecran And mx > 0 And my > 0 And my < #hauteur_ecran ; ... et si elle entre dans l'écran de jeu                     
      ReleaseMouse(#False)                                               ; ... alors on capture la souris dans l'écran de jeu
      MouseLocate(mx,my)                                                 ; ... on la positionne
      souris_dans_ecran_de_jeu = #True                                   ;... et on indique que la souris est dans l'écran de jeu
      If my > 0
        ResizeWindow(#fenetre_windows,#PB_Ignore,-26,#PB_Ignore,#PB_Ignore)
        EndIf 
    EndIf 
  EndIf
  ;=---------- Fin de la routine de gestion de la souris (voir aussi test dans procedure "afficher_la_souris")     
EndProcedure

Procedure afficher_souris()
  If souris_dans_ecran_de_jeu ; Ajouté car sans ce test, la souris redéfinie par un sprite s'affiche en plus de la souris "Windows"
                              ; quand on arrive au bord de l'écran
    DisplayTransparentSprite(#souris, MouseX(),MouseY())
  EndIf
EndProcedure

  Repeat    
    Repeat
      event = WindowEvent()
      Select event 
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until event = 0
    ClearScreen(#couleur_fond_ecran)
    ExamineMouse()
    gerer_souris()
    afficher_souris()
    FlipBuffers()
  Until event=#PB_Event_CloseWindow
vurvur
Messages : 60
Inscription : ven. 29/août/2014 19:52

Re: plein écran et barre de tâches...

Message par vurvur »

Le flag Borderless:

Code : Tout sélectionner

;================================================================================================================================
;= Programme squelette gérant la souris avec une fenêtre OpenWindow() et une fenêtre OpenWindowedScreen()
;================================================================================================================================
EnableExplicit
;---------- Constantes
  #couleur_fond_ecran=$FACE87
  #largeur_ecran=1366
  #hauteur_ecran=768
  #options_ecran=#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_BorderLess

;---------- Enumérations
  Enumeration
    #fenetre_windows
    #souris
  EndEnumeration
  
;---------- Variables
  Global event.i
  Global souris_dans_ecran_de_jeu.b
  Global mx.w
  Global my.w

  ;---------- Initialisation des environnements nécessaires
  If InitSprite()=0 : MessageRequester("Erreur", "InitSprite() non initialisé !"):End:EndIf
  If InitMouse()=0 : MessageRequester("Erreur", "InitMouse() non initialisé !"):End:EndIf
  
  ;=---------- Création de la fenêtre Windows
  OpenWindow(#fenetre_windows, 0, -26, #largeur_ecran,#hauteur_ecran, "Programme squelette - Jacques Joly (2021)",#options_ecran)
  
  ;=---------- Création de la fenêtre de jeu
  OpenWindowedScreen(WindowID(#fenetre_windows),0,0,#largeur_ecran,#hauteur_ecran,1,0,0) ; le 1=redimensionnement automatique
  CreateSprite(#souris,18,18)
  StartDrawing(SpriteOutput(#souris))
  Box(0,0,18,18,#Red)
  Box(2,2,14,14,#White)
  StopDrawing()
  
Procedure gerer_souris()
  ;=---------- Routine de gestion de la souris qui est soit dans l'écran de jeu, soit sur la fenêtre Windows
  If souris_dans_ecran_de_jeu    ; Si la souris est dans l'écran de jeu
    If MouseX() > #largeur_ecran-2 Or MouseY() > #hauteur_ecran-2  Or MouseX() < 1 Or MouseY() <1 ; ...et si elle s'approche des bords de l'écran
      ReleaseMouse(#True)                                                                         ; ....alors on libère la souris pour la rendre à la fenêtre Windows
      souris_dans_ecran_de_jeu = #False ; ... et on indique que q'elle n'est plus dans l'écran de jeu
      If MouseY() <1
        ResizeWindow(#fenetre_windows,#PB_Ignore,0,#PB_Ignore,#PB_Ignore)
      EndIf 
    EndIf  
  Else ; Sinon, c'est qu'elle est dans l'écran Windows                    
    mx = WindowMouseX(#fenetre_windows)  ; ... on récupère les coordonnées de la souris    
    my = WindowMouseY(#fenetre_windows)
    If mx < #largeur_ecran And mx > 0 And my > 0 And my < #hauteur_ecran ; ... et si elle entre dans l'écran de jeu                     
      ReleaseMouse(#False)                                               ; ... alors on capture la souris dans l'écran de jeu
      MouseLocate(mx,my)                                                 ; ... on la positionne
      souris_dans_ecran_de_jeu = #True                                   ;... et on indique que la souris est dans l'écran de jeu
      If my > 0
        ResizeWindow(#fenetre_windows,#PB_Ignore,-26,#PB_Ignore,#PB_Ignore)
        EndIf 
    EndIf 
  EndIf
  ;=---------- Fin de la routine de gestion de la souris (voir aussi test dans procedure "afficher_la_souris")     
EndProcedure

Procedure afficher_souris()
  If souris_dans_ecran_de_jeu ; Ajouté car sans ce test, la souris redéfinie par un sprite s'affiche en plus de la souris "Windows"
                              ; quand on arrive au bord de l'écran
    DisplayTransparentSprite(#souris, MouseX(),MouseY())
  EndIf
EndProcedure

  Repeat    
    Repeat
      event = WindowEvent()
      Select event 
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until event = 0
    ClearScreen(#couleur_fond_ecran)
    ExamineMouse()
    gerer_souris()
    afficher_souris()
    FlipBuffers()
  Until event=#PB_Event_CloseWindow
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: plein écran et barre de tâches...

Message par jak64 »

Bonjour vurvur,
Merci de ta réponse, c'est nickel, par contre, je ne comprends pas pourquoi en mettant "#PB_Window_BorderLess" on voit la barre de titre quand on monte la souris (ce que je veux). je n'ai pas essayé cette option car j'imaginais qu'en employant "#PB_Window_BorderLess", la barre de titre n'apparaitrait pas lorsqu'on approche la souris du haut de l'écran.
Encore merci.
"
"
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: plein écran et barre de tâches...

Message par Micoute »

Si tu ne souhaite pas voir s'afficher la barre de titre, supprime les options #PB_Window_MinimizeGadget et #PB_Window_MaximizeGadget et pour fermer la fenêtre presse les touche Alt et F4.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: plein écran et barre de tâches...

Message par venom »

J'ai pas suivi, mais si dans les options de ta fenêtre tu met juste #PB_Window_BorderLess tu aura une fenêtre sans aucune bordure. :| et tu l'ouvre en full screen + échap pour killer et hop







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: plein écran et barre de tâches...

Message par Micoute »

Oui, c'est une solution que j'utilise fréquemment.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: plein écran et barre de tâches...

Message par jak64 »

Bonjour,
Merci à tous pour vos réponses, mais je souhaite tout de même pouvoir au minimum mettre #PB_Window_MinimizeGadget afin de pouvoir mettre la fenêtre dans la barre de tâches si je veux pouvoir accéder à une autre application, par exemple.
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: plein écran et barre de tâches...

Message par venom »

Ba un ButtonGadget qui minimize la fenêtre et hop :D

genre ça :

Code : Tout sélectionner

  If OpenWindow(0, 0, 0, 220, 100, "Exemple...", #PB_Window_BorderLess | #PB_Window_Maximize)

   ButtonGadget  (1, 0, 0, 20, 20, "_")
   ButtonGadget  (2, 20, 0, 20, 20, "X")
   
   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 
            SetWindowState(0, #PB_Window_Minimize); <----- si appuie sur button 1 minimize la fenetre 
           Case 2 
            CloseWindow(0); <----- si appuie sur button 2 ferme la fenetre 
             End 
         EndSelect
            
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: plein écran et barre de tâches...

Message par jak64 »

Bonjour venon,
Ca ne me va pas car j'ai un écran de jeu et je veux que rien n'apparaisse (ni barre de titre ni autre quand le jeu se déroule), c'est pour ça que dans l'exemple que j'ai mis au début, la barre de titre n'apparaît que lorsqu'on monte la souris en haut de l'écran.
En résumé :
Quand on joue avec le jeu, tout l'écran est consacré au jeu, pas de barre de titre, pas de bouton ou autre pour minimiser ou fermer, rien...
Par contre, si on souhaite minimiser la fenêtre, on monte la souris vers le haut de l'écran et la barre de titre apparaît alors. Je ne souhaite pas, de plus, utiliser les raccourcis pour fermer la fenêtre (sur mon vieil ordi, pour faire ALT + F4, il me faut appuyer 3 touches en même temps (ALT + FN + F4)
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: plein écran et barre de tâches...

Message par venom »

Ah ok ok.
jak64 a écrit : mar. 18/mai/2021 18:32Je ne souhaite pas, de plus, utiliser les raccourcis pour fermer la fenêtre (sur mon vieil ordi, pour faire ALT + F4, il me faut appuyer 3 touches en même temps (ALT + FN + F4)
Perso je ne trouve pas plus pratique le fait d'afficher la barre en testant si le curseur arrive en haut de la fenêtre. (En terme de codage)
Ça n'est que mon avis. :wink:

Pour le coup, rien ne t'empêche d'utiliser genre juste la touche F4 (par exemple) pour réduire la fenêtre.







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
jak64
Messages : 85
Inscription : dim. 03/mai/2020 23:16

Re: plein écran et barre de tâches...

Message par jak64 »

Si tu regardes le code que j'ai fait (avec la modification que m'a proposée vurvur) cela ne prend que 2 lignes de code et ça fonctionnera même si j'utilise plusieurs procédures d'affichage (exemple, un affichage règles du jeu, un affichage saisie du nom du joueur, un affichage début de partie, un affichage partie, etc...) puisque cette gestion de la barre de titre est dans la routine "gerer_souris" qui est utilisée dans tous mes affichages.
J'ai déjà vu cette façon de faire (barre de titre apparaissant quand on monte la souris en haut de l'écran), entre autres dans le jeu de Klondike "Klondike Planet"
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: plein écran et barre de tâches...

Message par venom »

Il est vrai que je n'ai pas essayé le code. Le principal, c'est que tu es trouver solution :D






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre