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 :

X11 gestion de 2 fenetres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut X11 gestion de 2 fenetres
    Bonjours a tousm
    Je dois realiser un logiciel de dessin pour un projet en classe dans le quel il faut gerer 2 fenetres.
    Mon probleme est le suivant
    Je n'arrive pas a touver comment faire pour gerer les evenements des deux fenetres.
    tantot c'est l'une qui est gerer tantot c'est l'autre.
    Si quelqu'un a une idee.

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Ceci n'est pas encore une question C mais plutôt une question algorithme. Même si cela va être programmé en C par la suite.

    Je suis en train de faire ma propre GUI (je ne sais pas vraiment pourquoi sauf pour le faire une fois je suppose)

    Première question:

    - Est-ce que tes fenêtres peuvent bouger/être redimensionner/fermer?
    - Est-ce que tu veux gérer la souris ou simplement le clavier?

    La solution la plus simple (mais la moins jolie/modifiable) est d'avoir un pointeur ou un indice qui sera envoyé aux fonctions qui gère le clavier/souris et sera utilisé pour savoir à qui envoyer l'information...

    Jc

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Il pourrait y avoir plusieurs premières questions et l'une de ces premières questions pourraient être: avec quel librairie graphique fais je bien pouvoir faire mes fenêtres en C?
    Avouons que si nous savions la lib que tu utilises ils nous seraient peut être plus facile de t'aider?

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Gnux
    Il pourrait y avoir plusieurs premières questions et l'une de ces premières questions pourraient être: avec quel librairie graphique fais je bien pouvoir faire mes fenêtres en C?
    Avouons que si nous savions la lib que tu utilises ils nous seraient peut être plus facile de t'aider?
    C'est comme pour le porsalut :
    X11 gestion de 2 fenetres

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Gnux
    Il pourrait y avoir plusieurs premières questions et l'une de ces premières questions pourraient être: avec quel librairie graphique fais je bien pouvoir faire mes fenêtres en C?
    Avouons que si nous savions la lib que tu utilises ils nous seraient peut être plus facile de t'aider?
    Vu qu'il le fait pour un devoir/projet/exercice, et qu'il a spécifié qu'il le faisait en X11, je suppose qu'il n'aura pas le droit d'utiliser autre chose que les fonctions de base "une touche clavier a été appuyée", "un clic souris s'est passé ici"...

    Bref, la gestion des deux fenêtres devra se faire à la main...

    Est-ce que tu sais au moins quelles fonctions utilisées pour récupérer quelle est la position de la souris et quelle touche a été appuyée?

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Citation Envoyé par gege2061
    Citation Envoyé par Gnux
    Il pourrait y avoir plusieurs premières questions et l'une de ces premières questions pourraient être: avec quel librairie graphique fais je bien pouvoir faire mes fenêtres en C?
    Avouons que si nous savions la lib que tu utilises ils nous seraient peut être plus facile de t'aider?
    C'est comme pour le porsalut :
    X11 gestion de 2 fenetres
    /me nettoie ses lunettes ah
    J'avais pas vu dsl

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut
    Je travaille sous Unix NetBsd avec le windows manager fluxbox. Niveau graphique je suis limité a la lib X11 du C.
    Il m'est possible de bouger les fenêtres, de les redimentionner et de les fermer.
    Pour réaliser le logiciel, je dois géré à la fois le clavier et la souris.
    Je peux connêtre la position de la souris.

  8. #8
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Voici comment j'avais géré ce problème:

    Chaque fenêtre de type différent a ses propres fonctions de comportement face aux clics/touches claviers donc j'ai créé une structure contenant toute l'information de la fenêtre:

    - position/taille
    - etat (ouvert/fermé/minimiser)
    - info supplémentaires (couleur, ...)
    - pointeurs de fonctions vers les fonctions qui gère clavier ou souris

    Ensuite j'ai fait une structure qui gère les fenêtres:

    - Une liste chaînée des fenêtres
    - Quelle fenêtre est "active"

    C'est une solution comme une autre je suppose mais
    Avec ces infos, tu devrais pouvoir commencer,
    Jc

  9. #9
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Plus simple pour le cas present:

    La liste chainee de fenetre est tres pratique pour plus de deux fenetre. En X je l'ai utilisee pour une fenetre sur laquelle j'avais une serie de boutons.

    En l'occurence tu peux faire simple (pas de liste, mais tes deux fenetres dans une structure)

    Cree une structure qui contient tes deux fenetres, passe la a ta fonction de gestion d'evenement, et apelles les fonctions appropriees ensuite.

    Declaration de la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    typedef struct	windows_s
    {
      GC		gc;
      Display	*dpy;
      Window	first_win;
      Window	second_win;
    }		windows_t;
    Ensuite tu la passe au surveillant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int	main()
    {
      windows_t	*wins;
     
      wins = initialise_wins();
      while (1)
        {
          get_event(wins);
        }
      return (0);
    }
    Et dans notre ami le surveillant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void	get_event(windows_t	*wins)
    {
      XEvent    xev;
     
      XNextEvent(wins->dpy, &xev);
      if (xev.xany.window == wins->first_win)
        firstwin_event(wins, xev);
      if (xev.xany.window == args->second_win)
        secondwin_event(wins, xev);
      return ;
    }
    Et dans firstwin_event et secondwin_event, tu fais... comme tu veux.

  10. #10
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut Peut-on retrouver la window parent ?
    Bonsoir,
    J'ai un autre probeme car dans l'une de mes window j'ai des buttons qui eux aussi ont leurs propre windows. quand je point sur un de ces buttons ca n'appel pas la fonction firstwin_event car la windows est celle du button est non le firstwin.
    Est-il possible de retrouver la winidows ? par exemple.

  11. #11
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut Re: Peut-on retrouver la window parent ?
    Citation Envoyé par caesarvanou
    Bonsoir,
    J'ai un autre probeme car dans l'une de mes window j'ai des buttons qui eux aussi ont leurs propre windows. quand je point sur un de ces buttons ca n'appel pas la fonction firstwin_event car la windows est celle du button est non le firstwin.
    Est-il possible de retrouver la winidows ? par exemple.
    C'est possible.

    En fait il faut que tu mette un masque d'evenement sur chaque bouton/fenetre, et que tu verifie quand tu recois ton evenement si c'est bien sur elle qu'on a clique.

    Pour ce cas, la liste chainee de fenetre est toute indiquee, comme l'a decrite fearyourself.

    1_ Tu remplis une liste chainee avec tes boutons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    btn1 = create_button(...);
    btn2 = create_button(...);
    btn3 = create_button(...);
    ...
     
    list_add(btn1);
    lsit_add(btn2);
    list_add(btn2);
    Avec un create_button qui devrait ressembler a ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    button    *create_button(...)
    {
        button *new_btn;
     
        new_btn = malloc(sizeof(*new_btn));
        button = XCreateWindow(...);
        XSelectInput(dpy, new_btn, ExposureMask | ButtonPressMask | ButtonReleaseMask);
        ....
        return (new_btn);
    }
    2_ Dans ton gestionnaire d'evenement, tu parcours la liste chainee pour trouver la fenetre qui vient d'etre cliquee.

    En considerant que tu as une liste chainee nommee list, et un XEvent nomme xevent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while (list)
    {
      if (list->button == xev.xany.window)
        {
            /* Et la tu fais l'action qui resulte d'un clic sur un bouton. */
        }
    }

  12. #12
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut Comment gerer les buttons des les fenetres ?
    Bonjour,
    Les buttons fonctionnes tres bien, en tait jl'ai meme deux liste chaine une pour les outils et une autre pour le pelette de couleurs.
    Mais je n'arrive pas a gere a la fois les buttons et les deux fenetres.

  13. #13
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Sans plus d'explication, on ne pourra pas t'aider...

    Mais de toute façon ton problème est plus algorithmique que lié au C pour le moment.

    La gestion correcte de fenêtre doit se faire avec beaucoup de reflexion et attention. Quelle solution proposes-tu?

    Expliques en quelques phrases, l'algorithme que tu utilises et comment tu gères les clics souris...

    Jc

  14. #14
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut Re: Comment gerer les buttons des les fenetres ?
    Citation Envoyé par caesarvanou
    Bonjour,
    Les buttons fonctionnes tres bien, en tait jl'ai meme deux liste chaine une pour les outils et une autre pour le pelette de couleurs.
    Mais je n'arrive pas a gere a la fois les buttons et les deux fenetres.
    Tant mieux si ca marche, le X pour faire des applications de ce genre c'est vraiment pas joyeux.
    C'est pour ca qu'on a invente GTK et d'autres du genre.

    Pourrais tu preciser ton probleme ? C'est un peu flou pour qu'on puisse t'aider.

  15. #15
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Je suis pas bien d'avoir compris ton problème, mais peut être que ça pourra t'aider:

    - XNextEvent rapporte tous les événements de toutes les fenêtres de ton programme. Tu peux utiliser d'autre fonction comme XWindowEvent par exemple qui te permettent de spécifier la fenêtre pour laquelle tu veux les événements.

    XWindowEvent

    - Ensuite si tu utilises XNextEvent tu peux souvent savoir à quelle fenêtre appartient l'événement en regardant le champs window de la structure que tu récupères.
    En tout cas pour les événement souris et clavier ce champ est présent.

    structure pour la gestion des événements clavier/souris

    Voilà voilà en espérant avoir pu t'aider

  16. #16
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Sinon plus simplement, XNextEvent() copie dans une structure XEvent toutes les donnes du dernier evenement.

    Par consequent dans un programme multi fenetre, il suffit de comparer la fenetre qui a recu l'evenement avec les tiennes.

    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
     
     
    XEvent    xevent;
    Display   *dpy
    ...
     
    XNextEvent(dpy, &xevent);
    if (xevent.xany.window == win1)
    {
       ...
    }
    if (xevent.xany.window == win2)
    {
       ...
    }
    Et tu ajoute a ca ta gestion pour les boutons.

    En X11, tout est fenetre. Au niveau des evenements, il n'y a aucune difference au niveau evenement entre une main window et un bouton (expose, click, etc...)

  17. #17
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut Merci
    Ok mercim je ne sais pas si j'aurrai le temps de tester car on a beaucoup de travaille les projets a rendrer s'enchaine a une vitesse folle.
    Merci de votre. J'ai pu rendrre quelquechose de potable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gestion des fenetres
    Par mzibri dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 07/06/2006, 17h46
  2. Ouvrir une fenetre avec l'heure sur écran externe avec X11
    Par jamesleouf dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 20/03/2006, 14h56
  3. [MDI] gestion des fenêtres
    Par Lenaick dans le forum C++Builder
    Réponses: 12
    Dernier message: 23/02/2006, 18h15
  4. [session] gestion d'une session par fenetre de navigateur
    Par devtele dans le forum Développement Web en Java
    Réponses: 9
    Dernier message: 14/12/2005, 10h20
  5. Question sur la gestion des fenetres MDI
    Par RémiONERA dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/07/2005, 07h58

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