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

API graphiques Discussion :

Comment réaliser une GUI ? (conception, architecture)


Sujet :

API graphiques

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut Comment réaliser une GUI ? (conception, architecture)
    Bonjour,
    Je souhaiterai réaliser une GUI, cependant je ne connais pas du tout l'architecture d'un tel "programme". J' aimerai donc avoir des informations sur la forme (diagramme des classes, héritage, ...) et sur le fond ( qui gère quoi, quand on clique sur un bouton quelle est la fonction appelée, ...).
    Pour le moment, je ne cherche pas à programmer (donc le langage et le système ne sont pas définis) mais plutôt à me renseigner.

    Si j'obtient beaucoup d'informations, je pense réaliser un rapport que je publierai sur le site.

    Merci !

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Bonjour,

    Et bien ce n’est pas facile de répondre à ta question...
    Il existe mult-GUI, et chacun à ses particularités...

    Que veux-tu faires exactement ?

    Suivant ce que tu veux faire, peux être pourras t'on t'orienter vers tel ou tel GUI.

  3. #3
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Ange_de_coren
    Bonjour,
    Je souhaiterai réaliser une GUI, cependant je ne connais pas du tout l'architecture d'un tel "programme".
    Merci !
    Une GUI pour un jeu ??
    C'est parmi les choses les + simples à réaliser .
    Tu crées des classes de boutons tu les affiches avec des bitmaps et point barre.
    Et chaque bouton a un role défini : charger une partie , sélectionner une unité

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    En fait, je voulais connaitre les GUI les plus récentes, ensuite je ne connais pas toutes les GUI ni leurs modèles. Peut-être que le mieu est de partir sur une GUI et puis de voir comment elle est fait et de continuer sur une autre.

    On peut partir sur Swing par exemple ou celle que tu connais le mieu. Je m'en remet à ton expérience.

    Mon but final sera de réaliser une GUI 3D sous OpenSceneGraph (mais bon je préfére voir ce qui existe déjà pour la faire la mieu possible d'où la réalisation d'une doc!).

  5. #5
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Ange_de_coren
    On peut partir sur Swing par exemple ou celle que tu connais le mieu. Je m'en remet à ton expérience.

    Mon but final sera de réaliser une GUI 3D sous OpenSceneGraph (mais bon je préfére voir ce qui existe déjà pour la faire la mieu possible d'où la réalisation d'une doc!).

    Ah on en sait un peu plus !
    Les GUI cela dépend entièrement de l'Os ! A moins de la créer par toi-même
    Ta question semble être orientée + programmation Java que jeux vidéos.

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Comme je l'ai dit je ne cherche pas en priorité à programmer mais plutôt comprendre tous les pièges et tous les systèmes existants.

    Par contre je cherche à faire une GUI complête c'est-à-dire création de fenetre, bouton , ascenseur, radio bouton , onglet , ... bref tout ce qu'on peux voir de nos jours dans une application.

    Je pense que vous comprennez un peu plus où je veux en venir !

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Bon si on est obligé de choisir un système alors je dis : Windows et C++ / OpenSceneGraph.

    Mais je ne pense pas que ça soit utile pour le moment, je cherche juste à comprendre.

    Par exemple, les objets de base formant le GUI.
    J'ai une fenêtre qui va posséder des élements (Comment lier les éléments ? une liste, un tableau , ...). Comme élément, j'ai : un bouton, une barre de progression qui hérite de quoi et pourquoi ?

    Pour commencer, je pense que le mieu serai de répondre à ces questions et former un diagramme des classes.

    Si vous avez quelques sites web, n'hésitez pas à donner les URL !!

    Merki !

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    C'est un sujet SUPER interressant.

    Je me suis penché plusieurs fois sur le sujet.
    j'avais commencé a realiser un truc en openGL mais cétait le manque de temps (et de motivation ;-) ) m'ont fait abandonner.

    il existe cependant un livre qui peut t'aider : PROGRAMMATION GRAPHIQUE PORTABLE EN C++

    Pour l'exmple de SWING il utilise plusieurs pattern :
    - un derivé de MVC : M-VC
    - des decorateurs pour les IO
    - des Observateurs pour les events
    ...

    Je me souvient d'un tuto sur GLinfrench qui parlais de ca aussi mais c'etait tres succincte.

  9. #9
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Pour Windows et sa MFC, tout hérite d'une class CWnd qui hérite lui-même d’autres class

    Pour swing, JFrame -> http://www.liafa.jussieu.fr/~carton/...roduction.html.

    Pour mon propre GUI (OpenGL/Direct3D), j'ai un objet de base qui se split en 2 objets, 2D et 3D qui sont hérités par divers éléments qui ensuite servent de base à créer d'autres objets comme des boutons....
    Les fenêtres sont traitées séparément.

    C'est vrai que c'est un sujet intéressant, masi super long à traiter

  10. #10
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Ca fait plaisir de voir que ce sujet pationne beaucoup de monde donc je pense que je vais réaliser une doc la dessus avec l'aide des personnes qui le souhaite !

  11. #11
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Ti-R
    Pour Windows et sa MFC, tout hérite d'une class CWnd qui hérite lui-même d’autres class
    La base de classe avec MFC c'est CObject.
    Mais attention qu'il n'y ait pas confusion, Windows , l'OS ne repose PAS sur les MFC mais sur API win32 !
    MFC est une couche de classes comme Qt par exemple ( Qt fait exactement la même chose ) ou WxWidget...qui permet de concevoir des applis GUI relativement rapidement.

  12. #12
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    MFC qui map en partie l'API win32 qui est écrit en C

  13. #13
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    Hum je pense tout de meme qu'un bon choix serais de prendre un systeme d'affichage multiplateforme pour realiser sa GUI.

    Par exemple SDL+openGL qui n'en possede pas en officielle.
    Maintenant Pour le systeme de couche nous n'avons pas trop le choix, toutes les lib utilise une couche inferieure, QT, GTK, Wx, SDL, ...

  14. #14
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par ash.ice.loky
    Hum je pense tout de meme qu'un bon choix serais de prendre un systeme d'affichage multiplateforme pour realiser sa GUI.

    Par exemple SDL+openGL qui n'en possede pas en officielle.
    Je suis d'accord avec toi, je pense que le mieu serai de prendre des librairies utilisable sous windows et linux et essayer de comprendre le fonctionnement sans ce préoccuper de l'OS.

    J'ai fouillé dans les documents du site et j'ai retrouvé un tuto parlant des MFC et donnant la struture vous le trouverez à cette adresse page 4 : ftp://ftp-developpez.com/farscape/tu...er-mfc-vc6.pdf
    La partie qui nous interesse est l'objet Window support.
    (Bon c'est avec les MFC mais on peut peut-être en tirer quelque chose !)
    En ce qui me concerne c'est le GUI que j'ai utilisé le plus (avec une petit peu d'API windows mais je préfere les classes ).

    Bref je vais regarder l'architecture de Swing et trouver un jolie diagramme et peut être trouver des similitudes avec les MFC (pour les widgets notamment).

    J'ai trouvé aussi sur Wiki un article sur les widgets : http://fr.wikipedia.org/wiki/Widget
    il liste tous les éléments que l'on peut rencontrer dans une appli (peut servir pour pas en oublier !)

    Il faut aussi chercher comment gérer les actions (clique sur un bouton, bouger une fenetre,... bref qui gere ça , un manager ou chaque élément ?)
    Si quelqu'un connait ou a des infos, n'hésitez pas !

  15. #15
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Bon apres quelques recherches rapide j'ai trouvé qq infos sur Swing.

    http://java.sun.com/j2se/1.5.0/docs/...view-tree.html

    Voici un arbre décrivant toutes les classes utilisées dans Swing.
    (C'est un peu lourd à lire mais on retrouve des infos)
    Pour chaque widget, par exemple : JComboBox, il y a une class Accessible, KeySelectionManager qui lui est rattaché.

    On dirait donc que les actions sont mis dans différente classe (supposition) si quelqu'un connait bien Swing peut être qu'il pourra nous éclairer !

  16. #16
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    a mon avis, swing est effectivement un bon exemple pour orienter tes recherches.
    pour moi, un systeme de GUI doit aussi redefinir un systeme d'evenement (appuie de touche, souris et autre) qu'il utilise ne interne, ainsi, il ne reste plus qu'a interfacer ce systeme avec l'API choisie pour gerer les evenements (SDL,GLUT,DInput). autant l'affichage des composants est relativement simple à gerer, autant la gestion des evenements peut devenir super compliqué si tu souhaite faire un truc complet

  17. #17
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    la gestion des evenements peut devenir super compliqué si tu souhaite faire un truc complet
    +1, je me galère avec mon GUI personnel pour les gérer...

    Et swing est plus récent que la MFC, et bien mieux conçus !!

    (Il y a des trucs bizarres dedans aussi, on se retrouve rapidement avec 100% d'utilisation CPU, car la gestion d'événement fait que parfois, on modifie une valeur d'un objet suivant le type quand on l'affiche, qui lance un événement pour se redessiner, qui modifie sa valeur, qui relance un événement pour se redessiner, etc....)

  18. #18
    Membre actif Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Points : 242
    Points
    242
    Par défaut
    Tu peux aller voir sur la MSDN, c'est très complet au niveau architecture GUI: Window Forms avec les MFC.

    Et voici une partie seulement de l'organisation des différents composants entre eux (tiré de la MSDN toujours):



    Ca donne au moins une idée générale, peu importe si c'est pour un jeu ou pas.


    En ce qui concerne les events, c'est pas évident
    Le mieux seraient peut-être de redéfinir des méthodes comme OnClick(). Si c'est un GUI "normal", regarde du côté des fonctions callback. Si c'est un GUI 3D (pour un jeu), ça se corse... J'ai un ami qui y a passé 1 an là-dessus Mais il a finit son projet de GUI "graphique".

  19. #19
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    En effet les event sont assez chiant a gerer.

    Mais le pattern Observateur aide bien.
    En demarchant de cette maniere tu n'obtiendra rien de bon, il ne faut pas adapter ton archi au probleme locaux mais l'inverse, du coup commence par penser a ton architecture generale, et ensuite la facon de faire pour chaque probleme que tu rencontrera.

    Swing peut servir d'exemple pour le bioen comme le moins bien, je n'aime pas son archi M-VC, je prefere de loin M-V-C.
    A mon avis les event arrive bien apres ce probleme.

  20. #20
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Je pense qu'avec tous ces informations on va pouvoir réfléchir à nos classes pour former notre GUI. On va donc dans un premier temps voir l'aspet graphique (le plus simple ) et on essayera de faire la gestion des events après (on listera les evenement pour chaque widget aussi).

    Donc on va commencé par les élements graphique (bouton , fenetre, ...) :

    la classe Widget étant l'élément de base où vont découler tous nos éléments (classe abstraite).

    Cette classe possède 3 membres : x,y,z (coordonnée spaciale) pour situer un objet graphique. Le choix de coordonnée spaciale reside dans le fait que je veux réaliser une GUI 3D. Le problème reste à définir à quoi correspond ce point : le centre de l'objet, ou le coin supérieur gauche (insertion d'un booléan pour préciser ?).
    Ensuite création d'une fonction virtuelle permettant d'afficher le widget.

    Doit-on rajouter autre chose ? (boolean de visibilité, ... )

    On créer une classe Fenêtre héritant de notre classe Widget.
    Cette classe va avoir plusieurs membres :
    - plusieurs booléan ou un int (que l'on utilisera avec des masques) pour : déplacer, bouton de réduction , bouton d'agrandissement, bouton de fermeture.

    - liste de widgets (pour ajouter des élements dont d'autre fenetre)

    - lien vers un fichier graphique

    Pour ces fonctions :

    - affichage de la fenetre

    - chargement de fichier xml permettant de données un graphique à la fenetre (taille des bordure et style à afficher, image de fond, ...). Il faudra développer cette partie là pour rendre la fenetre plus jolie et de manière simple.

    Les evenements :
    - déplacer la fenetre
    - fermer la fenetre
    - agrandir la fenetre (avec les bordures)
    - minimiser/maximiser
    - réafficher le contenu

    Voilà pour le début, j'ai oublié aussi de parler des Scrool bar de la fenetre.

    Maintenant il faut me dire ce que vous en penser et les problèmes que j'ai oublié.

    Merci !

Discussions similaires

  1. Réponses: 12
    Dernier message: 23/01/2008, 10h17
  2. [SQL] Comment réaliser une fonction d'incrementation ?
    Par da_latifa dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/12/2005, 12h14
  3. Réponses: 4
    Dernier message: 25/12/2005, 19h46
  4. Réponses: 1
    Dernier message: 09/12/2005, 14h43
  5. [FLASH MX] Comment réaliser une forme dentelée
    Par celina5880 dans le forum Flash
    Réponses: 4
    Dernier message: 04/11/2004, 18h48

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