Faire une interface graphique

Bon voila mon probleme,
j’ai appris le C et je suis en train d’apprendre le Java (et donc C# vu que ca se ressemble comme deux goutes d’eau (non GLOP me tape pas sur les doigts :stuck_out_tongue: )).
Que ce soit sous windows ou linux, je me tape du mode console, on en viendra aux interfaces graphiques que l’année prochaine, mais moi je veux pas attendre !

La je voudrais commencer a faire de vrais petits programmes en C afin de les mettres sur le web sur des sites genre cppfrance.com. Pcke sur un CV plutard, marqué qu’on a deja fait des softs qui sont qques parts et que des gens utilisent c’est quand meme un +. Mais je voudrais du meme coup, que ce soit un programme vraiment utile. Je sais deja quoi faire, je voudrais faire un petit soft de gestion d’une salle de classe (avec gestion des notes des eleves, leurs moyennes, etc…) pour des instites. Vous me direz que cela peut se faire en mode console, et que même sous linux y a ncurses pour faire du graphisme. Mais bon, les instites ne sont pas forcements des informaticiens (j’en connais) et encore moins des geeks, donc utiliser du mode console sous linux, ca risque de coincer.

Donc ca sera du windows, puis meme pour moi, je veux savoir programmer sous tous les OS.

Donc ma question est : savez ou puis je apprendre a faire des boites de dialogues en C, faire un zolie programme graphique a la « moderne » ? bref, ou trouver des tutos simples pour debutants dans le domaine de l’interface graphique, ou meme si vous pouvez m’expliquer comme marchent les api windows (GLOP ??) et comment s’en servir ca serait ausi bien.

Merci bien.

Bah, en C, tu peux utiliser la librairies QT, qui est pas mal pour faire du graphisme (si tu veux pas te prendre la tête avec le code win32). Mais franchement, fais plutôt du C# ou du Java, c’est bien plus facile. Le mieux, c’est de prendre les sources dans un prog. simples (voir le site codes-sources) et de regarder comment ça marche.
Après, tu peux prendre des IDE qui contiennent un designer qui te permettent de “dessinner” à la main les éléments graphiques et qui retranscrivent ça en code (genre JBuilder, ou Visual Studio), c’est pratique et ça permet de comprendre comment marche l’instanciation des objets…
Autre chose, tu fais de la prog. objet ? Par ce que pour les interfaces graphiques c’est quand même mieux…

je plussois Kaneloon, C# managed + winform il n’y a pas mieux pour faire ça vite et bien . Et je dis ça en connaissance de cause, car j’ai codé mes interfaces directement avec win32 et GDI pendant pas mal de temps. Ce n’est pas que c’était foncièrement compliqué, surtout une fois codée une petite classe helper, mais c’était juste assez galère de placer correctement ses objets.

Bon là bien sûr, je parle pour windows, sous linux, je connais juste 100 fois moins les outils pour créer de chouettes interfaces, et mon expérience avec java s’est limité à un seul projet et j’ai oublié ce que j’avais utilisé pour pondre l’interface.

Pour le C, QT n’est pas très conseillé c’est plutot GTK qui rêgne. Mais franchement, comme dit tout le monde, pour débuter, c’est mieux Java ou C#.

Pour moi, je connais beaucoup plus Java et je doit dire que même si Swing a une mauvaise réputation, je trouve cette API facile à utiliser et très jolie pour peu quand utilise des autres skins que ceux de sun.

Disons qu’utiliser visual studio peut etre possible, mais j’aime bien tout faire moi même sans passer par un truc qui implementerait le code pour moi, je veux apprender a le faire moi même. Disons que je le ferais plutard quand je saurais comment ca marche.

Maintenant pourquoi en C, pcke je commence tout juste le java alors que le C ca fait un moment.

Et je veux qque choses qui se compile est s’execute sans a avoir installer .net ou une machine virtuelle.

Le java me seduit par son coté portabilité, mais pour des utilisateurs ne connaissant rien, je veux faire un prog ou ils n’auront qu’a lancer le .exe sans rien a avoir a installer en + que le programme lui même.

[quote name=‘jeclake’ date=’ 23 Feb 2005, 14:27’]Et je veux qque choses qui se compile est s’execute sans a avoir installer .net ou une machine virtuelle.

Le java me seduit par son coté portabilité, mais pour des utilisateurs ne connaissant rien, je veux faire un prog ou ils n’auront qu’a lancer le .exe sans rien a avoir a installer en + que le programme lui même.
[right][post=“335446”]<{POST_SNAPBACK}>[/post][/right][/quote]

Si ce n’est que ça, tu peux fournir sur un CD l’installation du JRE et l’installation de ton application, c’est pas très compliqué et n’importe qui peux le faire.
Idem pour le .NET

[quote name=‘ZGoblin’ date=’ 23 Feb 2005, 14:30’]Si ce n’est que ça, tu peux fournir sur un CD l’installation du JRE et l’installation de ton application, c’est pas très compliqué et n’importe qui peux le faire.
Idem pour le .NET
[right][post=“335448”]<{POST_SNAPBACK}>[/post][/right][/quote]

mouais, ca peut se faire aussi !
maintenant le truc, c’est que je ne suis pas sur d’avoir les connaissances en java.
Je veux dire qu’en C je sais faire de l’allocation dynamique, des tableaux, des listes chainees, gestions de fichiers, etc…
Mais le Java , je n’ai commencé qu’il y a 4 semaines !
donc si ca marche tjrs pareil qu’en C, let’s go pour le Java, mais si c’est different, c’est une autre histoire.

J’ai bien compris le histoires de class, d’instances, de references, de variables d’instances, etc… mais j’ai pas encore l’habitude de raisoner en objet, je pense systematiquement en imperatif, d’ou le C. Bon en même temps, c’est peut etre le meilleur moyen de m’y mettre a la POO en faisant ce petit soft.

Je vais pinailler mais QT c’est C++ only . Donc avec du C pur tu peux oublier. Maintenant pour une appli de gestion je plussoie fortement les gens qui te conseillent le C# et le Java (avec une préférence un poil subjective pour le Java qui a l’avantage de disposer d’une littérature abondante sur le net et de beaucoup d’exemples dans tous les domaines). Celà dit, en n’ayant jamais fait de langage objet il va falloir faire attentionà ne pas prendre de mauvaises habitudes en commençant la POO, mais bon, c’est une bonne occasion de s’y mettre.

Tutorials :P"

Pour moi, ca va être plus dure de te mettre à l’API GTK plutot qu’au Java, et ca sera une bonne façon de te mettre dans le bain.

Un tuto vraiment très complet et bien expliqué en français dans le texte : http://perso.wanadoo.fr/jm.doudoux/java/tutorial/

[quote name=‘jeclake’ date=’ 23 Feb 2005, 14:36’]mouais, ca peut se faire aussi !
maintenant le truc, c’est que je ne suis pas sur d’avoir les connaissances en java.
Je veux dire qu’en C je sais faire de l’allocation dynamique, des tableaux, des listes chainees, gestions de fichiers, etc…
Mais le Java , je n’ai commencé qu’il y a 4 semaines !
donc si ca marche tjrs pareil qu’en C, let’s go pour le Java, mais si c’est different, c’est une autre histoire.[/quote]
Bah, c’est juste cent fois plus simple de le faire en Java. Vu que pas mal de fonctions sont intégrées à l’API. Les classes “list”, “vectors” existent déjà, et tu n’as pas à gérer l’allocation de la mémoire…

Après, programmer une interface graphique n’a juste rien à voir. Il faut gérer des évenements, récupérer des actions…

[quote name=‘jeclake’ date=’ 23 Feb 2005, 14:36’]J’ai bien compris le histoires de class, d’instances, de references, de variables d’instances, etc… mais j’ai pas encore l’habitude de raisoner en objet, je pense systematiquement en imperatif, d’ou le C. Bon en même temps, c’est peut etre le meilleur moyen de m’y mettre a la POO en faisant ce petit soft.
[right][post=“335450”]<{POST_SNAPBACK}>[/post][/right][/quote]
Ca se fait surement, mais une interface en impératif ça me semble bien galère à programmer. Il est beaucoup plus simple de raisonner en “objet graphique”, avec de méthodes associées, qu’en procédural…

oki merci tout le monde pour vos conseils je vais mediter tout ca, mais si vous avez encore des conseils a me donner, n’hesitez pas, je suis preneur !!!

merci baucoup

J’ai fait mes premiers programmes avec interface graphique en java. C’est effectivement très facile dès qu’on a compris comment tout est imbriqué. Le lien filé par ZGoblin m’a l’air pas mal du tout pour apprendre le java en général. L’avantage de java, c’est certainnnement qu’il y a des milliers de classes pour faire pleins de trucs et notamment des interfaces graphiques. Pour ça, trois solutions: awt (moche), swing, plus joli et swt que j’ai pas essayé mais qui a l’air d’être le plus employé pour les gros trucs genre Azureus et compagnie. Bref, des trucs en swing, ça doit être pas trop mal pour débuter, une fois compris les principes de la programmation orientée objet.

Et le « generateur » de code de C# ne fait rien de bien bizzare qui serait complexe a apprendre au contraire de C++. La seule chose faite c’est de serializer des propriete des objets. Genre si t’as un bouton et que le .Text de ce bouton c’est « toto », il va ecrire bouton1.Text = « toto »;. Bon apres ca peut paraitre simple mais c’est super complique a faire :stuck_out_tongue: parceque justement il sait ce qu’il fait alors qu’en C++ c’est plus souvent un template malin ou il fait que « remplir les trous » dans le template de base.

Moi je ne pourrais te conseille que les windows forms en C#. Pour apprendre je pense que c’est celui qui te mettre le moins la tete dans le bordel et qui te decouragera pas devant la complexite de la chose. Parceque il vaut mieux commencer facile et attaquer les trucs les plus dur au fur et a mesure. Niveau « ressources » online, windows forms est aussi tres bien documente. Et si t’as un bug que ca soit dans le designer de VS ou dans le runtime je me ferais un plaisir de te le corriger :P.

Maintenant programmer une application client, c’est pas juste savoir faire de l’objet et savoir ce qu’est une evenement. Ca demande a apprendre beaucoup plus de choses sur comment architecturer son appli qui s’apprennent aussi et qui rajoutent une couche supplementaire de complexite.

Si tu as des questions, tu sais ou les poser je ferais de mon mieux pour t’aider. Oui… meme si tu fais du java :stuck_out_tongue: mais la les autres seront surement plus a meme de t’aider que moi si ca porte pas sur du design generique qui s’applique partout.

perso je suis carrement d’accord avec tout le monde pour dire que java(ou C#) c’est nettement mieux pour faire de IHM… surtout qu’en C a part GTK t’a pas grand chose et franchement, GTK avec son pseudo code objet “kémêmepasdel_objet”… c’est super lourd…

par contre personne n’a parlé de wxWidget… bon d’accord c’est C++ only et a mon avis un peu bizzard a comprendre au debut au niveau des evenements mais a part ca ca s’utilise tres bien et c’est portable…

[quote name=‹ GloP › date=’ 23 Feb 2005, 23:18’]Maintenant programmer une application client, c’est pas juste savoir faire de l’objet et savoir ce qu’est une evenement. Ca demande a apprendre beaucoup plus de choses sur comment architecturer son appli qui s’apprennent aussi et qui rajoutent une couche supplementaire de complexite.

Un gros +1, commence facile car sinon, ca va être trop le bordel. Il faut toujours bien réfléchir à l’organisation de son soft avant de commencer à programmer (ca s’apelle l’analyse.

Si tu as des questions, tu sais ou les poser je ferais de mon mieux pour t’aider. Oui… meme si tu fais du java :stuck_out_tongue: mais la les autres seront surement plus a meme de t’aider que moi si ca porte pas sur du design generique qui s’applique partout.
[right][post=« 335642 »]<{POST_SNAPBACK}>[/post][/right]

Si tu as des problèmes, ne t’inquiètes pas Glop et toujours là, et puis moi aussi, je m’occuperai personnellement de tes problèmes  :stuck_out_tongue: [/quote]

Tiens, tant que j’y suis, programmer une IHM n’est pas super dur en soit, mais ça s’apparente souvent à du pissage de code (en gros , il faut écrire plein de lignes de codes pas compliquées…). Souvent, dans un logiciel j’ai constaté que la partie “affichage” prenait 80% des lignes de code, et que la partie “core”, bien que plus compliquée à faire, que “20%”. Une fois que tu auras compris le principe, tu vas vite passer par les designer automatiques…

Pour renforcer ce que disent Glop ou Zgoblin, penses avant tout à dissocier l’affichage du reste, puis en général essaie d’encapsuler au maximum tout ce que tu faits. Ca évite de devoir se replonger dans le code de l’affichage pour changer un calcul…

merci beaucoup tout le monde.
Aussi, je voudrais partager mon application et ses sources, comment fait on pour avoir une licence genre GPL ou autre (c’est gratuit ?) ?

Sinon, je pense me pencher sur le Java ou C#.

On m’a dit que pour faire tourner un programme en C# fallait, un peu comme java et sa machine virtuelle, installer .net, mais, la ou c’et different de java, c’est que ce ne sont que des .dll qui sont installés. Ainsi, un programme en C# serait plus rapide (encore que pour mon appli, on ne verrait sans doute pas de difference) qu’en java, pcke en fait la machine virtuelle, est une sorte d’emulateur.
Vous en pensez quoi ?

EDIT :
le « on m’a dit » c’est une personne bien physique, pas un truc que je me suis dis un jour :stuck_out_tongue:

Oui, en C# il n’y a pas a proprement parler de machine virtuelle. Il y a un langage intermediaire le MSIL qui est compile just in time pour creer le code machine, mais tout l’environnement n’est pas abstrait comme dans une machine virtuelle. De meme les couches dans les librairies de widget windows forms ne sont pas de reimplementation pour certains controles de bases present dans comctl (si tu connais win32) mais des sortes de wrapper autour des objets win32, tu utilise donc au final la meme chose que si tu programmais ton soft en C++. (Sauf pour les controles plus complexes et evolues qui sont integralement fait en C# mais qui ont aucun probleme de rapidite.)

.Net fait parti de tous les nouveaux OS de MS, comme win serveur 2003 et les futurs OS. Les librairies sont tres completes, homogenes, et en general tres bien designees au niveau API. Les docs sont completes et les ressources sur le .net desormais tres nombreuses et largement suffisantes pour un debutant comme pour un programmeur confirme.

Enfin le mieux c’est que tu essayes hein, tu peux downloader Visual Studio Express C# 2005 en beta en 3 secondes gratos, et paf, tu tentes, c’est une beta avec .net 2.0 donc ne juge pas trop severement, mais ca permet de se faire une idee non seulement de ce qui se fait mais du futur proche (cette annee) de windows forms et de .net/C#.

(Je crois que la CTP de decembre est pas mal cassee ce qui est “normal”, les CTP sont que des snapshot a un moment donne du code et peuvent donc tomber sur un mauvais moment ou pas mal de chose sont cassees, mais en general ca marche plutot pas mal. La beta 2 est pour bientot en plus…)

J’en pense que tant que tu ne code pas une appli temps-réel (un jeu par exemple) la différence ne sera pas perceptible. Et quand bien même il y aurait 2 secondes de différences au lancement de l’appli, pour de la gestion ça n’a aucune importance.

Là ou le java peut être intéressant, c’est que tu peux en faire une applet ou une appli lançable en Java Web Start (rien à installer à part le JRE (la machine virtuelle java)) qui te permettrait de déployer ton appli juste en filant une URL aux gens concernés. En plus ça tourne aussi bien sous Windows que sous Linux et Mac. Donc c’est plutôt bien adapté au genre de truc que tu cherches à faire.

Pour la partie web je suppose qu’il est possible de faire quelque chose d’approchant en C# mais comme je n’y connais rien je vais laisser la parole à d’autre sur ce sujet (/invoke Glop).
[edit] pfff, grillé, trop rapide ce Glop

[quote name=‹ Twin › date=’ 24 Feb 2005, 02:08’]Donc c’est plutôt bien adapté au genre de truc que tu cherches à faire.

Pour la partie web je suppose qu’il est possible de faire quelque chose d’approchant en C# mais comme je n’y connais rien je vais laisser la parole à d’autre sur ce sujet (/invoke Glop).
[edit] pfff, grillé, trop rapide ce Glop
[right][post=« 335743 »]<{POST_SNAPBACK}>[/post][/right][/quote]
Ca marche aussi en .net pareil. Pour parler d’un truc que je connais qui s’y rapporte, .net 2.0 va plus loin t’as un truc qui s’appelle clickonce qui est une maniere plus evoluee et flexible de deployer et updater ses applis. L’avantage c’est que ca a les avantages d’une appli qui se lance sur le web et les avantages d’une appli qui tourne en local sur ta machine. Une mise a jour sur le serveur, c’est de suite chez le client, mais si il est pas connecte ca marche quand meme, etc :stuck_out_tongue: Enfin y a toute une equipe qui bosse la desus c’est balaise :stuck_out_tongue: Je vous laisse decouvrir comment ca marche vu que je suis pas hyper pointu dessus, j’ai d’autres trucs sur lequel je me concentre :stuck_out_tongue: