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 :

coder une interface graphique sans l'utilisation de toolkit, gtk ou autre


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut coder une interface graphique sans l'utilisation de toolkit, gtk ou autre
    bonjour, j'ai une question qui me tracasse un peu ces dernier temps, comment peut on, avec seulement les instructions de base du langage "c" coder une fenêtre interactive (avec menus si vous voulez), sans utiliser des API ou un environement de développement, ou il y a des fenêtres et des boutons pré-préparés.
    Auparavant, y avait pas ces outils d'aide comme aujourd'hui, pourtant les anciens os affichait des graphes et des fenêtres en utilisant seulement l'algorithme, maths et c .
    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 124
    Points : 558
    Points
    558
    Par défaut
    Attention ca va être très bref:

    On ne peut pas.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Bien sûr qu'on peut

    Mais (un exemple) tu prends OpenGL ou DirectX (bon ce sont 2 bibliothèques, mais quoique tu fasses maintenant tu as l'accélération graphique) et tu recodes tous les uis (boutons, label, listes déroulantes, ....) (au choix: images ou formes) et toutes les interactions (clavier, souris, ...)

    Et après (ou en même temps) si tu es fort, tu fais un générateur de fenêtre en ouvrant un fichier XML/ json/ texte/ ....

    Et avec OpenGL, tu seras multi-plateforme

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    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 186
    Points : 17 126
    Points
    17 126
    Par défaut
    En version un peu moins brève:

    Ils utilisaient la mémoire vidéo directement, chose que tu ne peux plus faire avec les OS modernes.
    Tu es contraint de passer au pire par les drivers vidéos, ce que font les toolkits.

    Ca veut dire que pour dessiner une fenêtre avec des boutons, il va te falloir la coder.

    Un point de départ dans cette approche, c'est la SDL, qui ne fournit que les primitives de dessins (ce qui est déjà beaucoup)
    Tu vas te retrouver à coder ton propre toolkit, qui sera mon bon que ceux déjà disponibles, vu que tu partiras de zéro.

    Même si c'est pour refaire la roue, c'est une mauvaise idée de partir de moins que la SDL.

    PS: je te conseille vivement d'utiliser la SDL2 (plutot que l'ancienne SDL1)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    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 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Il me vient à l'idée que dans les deux cas, il te faut passer par une bibliothèque de fenêtrage (SDL en est une, d'ailleurs).
    Sinon, tu ne pourras pas t'intégrer dans l'OS.
    Concrètement, sous windows, tu ne pourras pas faire autrement.

    Sur un unixoïde, ca sera éventuellement possible de t'en passer, mais ca veut dire te substituer à l'environnement graphique (le serveur X).
    Autrement dit, ne pas disposer des autres applications graphiques.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Sur un unixoïde, il y a aussi la méthode de contacter soi-même le serveur X par socket, bypassant les bibliothèques qui y touchent.
    L'inconvénient, c'est que c'est se compliquer la vie pour rien.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    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 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Et encore, c'est lui qui dessine, tu utilises le toolkit de X.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par nawfal.f Voir le message
    bonjour, j'ai une question qui me tracasse un peu ces dernier temps, comment peut on, avec seulement les instructions de base du langage "c" coder une fenêtre interactive (avec menus si vous voulez), sans utiliser des API ou un environement de développement, ou il y a des fenêtres et des boutons pré-préparés. Auparavant, y avait pas ces outils d'aide comme aujourd'hui, pourtant les anciens os affichait des graphes et des fenêtres en utilisant seulement l'algorithme, maths et c . Merci
    Concrètement, en l'absence de framework dédié, il faudra écrire le tien. Et pour éviter de tout refaire à chaque fois — et surtout en double — tu vas devoir définir toi-même tes API, puis t'appuyer dessus. C'est passionnant en soi parce que parcourir ce chemin va t'amener toi-même à envisager les concepts d'objets, d'événements, de boucle principale, etc. qui DEPUIS ont été formalisés et qui sont maintenant enseignés aux étudiants comme s'ils dataient de l'antiquité.

    À l'époque, c'était plus facile parce qu'il n'y avait pas de mode protégé et que la plupart des systèmes étaient monotâches. Donc, aller écrire directement à l'écran était possible et sans conséquence. Aujourd'hui il y a plus d'étapes à franchir mais le concept reste globalement le même.

    Comme on te l'a suggéré, le mieux que tu aies à faire aujourd'hui pour « simuler » l'environnement de l'époque est d'utiliser la SDL pour ouvrir une fenêtre de travail : ceci va te permettre de l'intégrer à ton environnement actuel. Mais une fois ouverte, tu t'interdis d'utiliser toute primitive SDL supplémentaire : tu n'utiliseras QUE le pointeur qui référence le début de la fenêtre et qui te permet d'écrire dedans. Tu t'apercevras qu'écrire des données à l'emplacement indiqué par ce pointeur provoque l'affichage de pixels dans cette fenêtre. Il en va exactement de même pour les périphériques vidéos : ils sont dotés de mémoire vive, et parfois utilisent directement la mémoire centrale de l'ordinateur, et la lisent automatiquement, linéairement, pendant les phases d'inactivité du CPU, de façon complètement transparente pour l'utilisateur : chaque valeur lue est transcrite en un pixel de couleur différente parce que l'automate se sert de cette valeur pour moduler le signal envoyé au moniteur.

    Quand tu feras la même chose avec la SDL, ce ne sera pas aussi direct (autrement tu risquerais de sortir de la fenêtre) mais presque : la bibliothèque se débrouillera pour intercepter ton accès (soit à l'aide d'une exception sur une page, soit en faisant des rafraîchissements à intervalles fixes) et pour le traduire vers l'environnement qu'elle gère.

    Quoi qu'il en soit, en faisant des accès mémoire, tu parviendras à allumer des pixels : de là, sers-toi de cette possibilité pour écrire une fonction Plot(x,y) qui te permettra d'en allumer un à la position de ton choix et avec la couleur de ton choix. Quand tu auras réussi, sers-toi de cette fonction pour écrire une autre fonction Line(x1,y1,x2,y2) pour tracer un segment de droite, etc. Fais-en une autre permettant de remplir une zone, directement avec le pointeur plutôt qu'avec Plot() et Line() pour des raisons de performance. Ensuite, tu peux essayer de lire un fichier bitmap et voir si tu arrives à le faire afficher directement dans ta fenêtre.

    Quand tu auras écrit cela, tu auras recomposé une bibliothèque graphique permettant de dessiner des primitives à l'écran à partir d'un simple pointeur, et tu auras fait 80% de ce que les interfaces de l'époque faisaient.

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    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 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Deux mots clés pour t'aider dans cette tache:
    raster: le fait de créer une image discrétisée en pixels.
    Bresenham: algorithme de tracer de segment (du nom de l'inventeur)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Utiliser une interface graphique
    Par Titi41 dans le forum Prolog
    Réponses: 1
    Dernier message: 17/05/2009, 20h08
  2. Réponses: 1
    Dernier message: 07/11/2008, 19h55
  3. [Templates] Quoi utiliser pour faire une interface graphique rapidement
    Par une_tite_question dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 13/10/2008, 23h35
  4. [Débutant] Réinitialiser une interface graphique sans en sortir
    Par Alucard9800XT dans le forum Interfaces Graphiques
    Réponses: 9
    Dernier message: 23/04/2007, 17h32
  5. Composants à utiliser pour une interface graphique Java
    Par nicolas.pied dans le forum Composants
    Réponses: 4
    Dernier message: 28/11/2005, 21h27

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