IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Récupérer l'état d'une application


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut Récupérer l'état d'une application
    Bonjour,

    Je suis entrain de coder un interface sur le framebuffer du Raspberry Pi, donc sans utiliser XWindows et sans gestionnaire de fenêtre. J'utilise la SDL pour la partie graphique.

    Mon programme est lancé depuis la console et dessine un interface sur lequel je dispose d'icone correspondant à des applications qui se lance en plein écran (donc sans besoin de X11) comme par exemple Kodi.


    Mon souci est que lorsque je clique sur une icone, j'execute la commande permettant de lancer ladite application (exemple Kodi), mais lorsque je la ferme je ne reviens pas sur mon interface mais sur un ecran noir (il me faut faire CTRL-ALT-F2 et CTRL-ALT-F1 pour revenir sur mon interface).

    Je pense que cela est du au fait que je ne re-dessine pas l'interface mais je ne sais pas comment faire pour corriger ca, j'ai pensé à une machine à état mais je ne sais pas comment récuperer l'état d'une application qui vient d'etre fermé et comment implémenter la machine en elle même.

    Ma fonction permettant de lancer une application ressemble à ca:
    (les applications pouvant être lancées sont contenues dans un vector tabIcone de type icone (une icone contient le nom de l'image et la commande pour lancer l'appli)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SDL_Event event;
    	while(continuer)
    	{
    		SDL_WaitEvent(&event);
    		switch(event.type)
    		{
    			case SDL_QUIT:
    				continuer=false;
    				break;
    			case SDL_KEYDOWN:
    				switch(event.key.keysym.sym)
    				{
    					case SDLK_ESCAPE: //On quitte l'application lorsque l'on appui sur echap
    						continuer = false;
    						break;
    				}
    				break;
    			case SDL_MOUSEBUTTONUP:
    				for(auto &icone : tabIcone) //Pour chaque icone on verifie si l'on a cliqué dessus
    				{
    					if(event.button.button==SDL_BUTTON_LEFT && event.button.x>(icone.getX()) && event.button.x<(icone.getX()+112) && event.button.y>(icone.getY()) && event.button.y<(icone.getY()+112) ) //Si on a cliqué sur l'icone
    						system(icone.getCommande()); //On execute la commande permettant de lancer l'application
    				}
     
    				break;
    		}
    Merci, si vous avez besoin de plus d'infos demander

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu ne serais pas en fullscreen, par hasard?
    Il faudrait peut-être fermer ton contexte de dessin (dont SDL_quit), avant de lancer l'application.

    Une application en fullscreen dit entre autre à l'OS de ne rien dessiner d'autre.
    Cela permet de dédier le/les GPU à l'application.

    C'est pour cette raison que certains jeux propose un mode fullscreen-window, qui est une fenêtre prenant tout l'écran.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Et vu que tu utilises SDL_WAitEvent effectivement tu ne redessineras pas tant qu'un évènement n'est pas triggered.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Et ben dit donc, toujours vous

    Oui l'application est en fullscreen et mon interface aussi, je peux pas mettre mon interface en fenetre je pense parce que je suis sur la sortie framebuffer donc pas de gestionnaire de fenetre.

    Si j'utilise SDL_pollevent le comportement sera différent ?

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    on va appeller l'application Kodi ce sera moins l'embrouille

    leternel -> Quand tu dit de fermer mon interface je vois ce que tu veux faire, je ferme mon interface, je lance kodi (je l'utilise) je ferme kodi et je rouvre mon interface.
    Le souci c'est que dans tout les cas j'arrive pas a déterminer quand kodi est actif ou pas, ou du moins il faudrait que je recupere le signal d'extinction

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Comment exactement lances-tu Kodi?
    Via un thread? auquel cas, il suffirait de faire un join().

Discussions similaires

  1. [PyQt] Récupérer l'état d'une QCheckBox
    Par parp1 dans le forum PyQt
    Réponses: 1
    Dernier message: 09/02/2006, 23h50
  2. Comment récupérer l'état d'une case à cocher
    Par oursquetaire dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/01/2006, 08h58
  3. [C#] - Récupérer les paramètres passés à une application
    Par linuxludo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/11/2005, 14h41
  4. procédure stockée pour renvoyer un état dans une application
    Par erickoffi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/10/2005, 19h05
  5. Réponses: 2
    Dernier message: 04/10/2005, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo