Librairie de classe pour gtk+

Soyez le premier à donner votre avis sur cette source.

Vue 7 758 fois - Téléchargée 1 231 fois

Description

Voila, c'est un de mes premiers "gros" projets, que j'ai commencé en Octobre. En gros, c'est un pack de classe pour simplifier le développement d'application avec GTK+ 2.x (moi, j'utilise le 2.4). Les classes disponibles pour le moments sont :

- Crystal (la classe de base)
- Form (C'est une classe qui gère les fenêtre ou GtkWindow)
- Label (Gère les Labels ou GtkLabel)
- Button (Gère les bouton ou GtkButton)
- Textbox (Gère les Textbox)
- String (Ma classe de gestion des chaines de caractère personnelle, que j'ai déja publié sur ce site; à part que cette classe à été mise à jour)

Voila. Ensuite, comme tout les editeur de GUI ou de truc comme sa, jai pas résisté à la tentation de montre des typedef de partout ...
Les anciens développeur VB remarqueront que les fonctions membres et les propriétés de mes classes ressemblent étrangement aux noms des propriétés et fonctions membres des classes Visual Basic.

PS : Développé avec Visual C++ 7.0 (.Net 2002) et testé sous Visual C++ 6.0

Source / Exemple :


// Préprocésseur --------------------------------------------------------------
#include "Crystal.hpp"
// Prototypes -----------------------------------------------------------------
void main(int argc, char *argv[]);
void *frmMain_OnDestroy(GtkWidget *, void *);
void *cmdExit_OnClick(GtkWidget *, void *);
// Objets publiques -----------------------------------------------------------
Form *frmMain;
Button *cmdExit;
// Fonction Main --------------------------------------------------------------
void main(int argc, char *argv[])
{
	// Initialise GTK+
	Crystal::Init(&argc, &argv);
	// Crée frmMain
	frmMain = new Form("Main");
	frmMain->ConnectSignal("destroy", &frmMain_OnDestroy);
	// Crée cmdExit
	cmdExit = new Button("Quitter");
	cmdExit->ConnectSignal("clicked", &cmdExit_OnClick);
	// Ajoute cmdExit dans frmMain
	frmMain->Add(cmdExit);
	// Affiche frmMain et frmText
	frmMain->ShowAll();
	// Lance la boucle évenementielle
	Crystal::Run();
}
// ----------------------------------------------------------------------------
void *frmMain_OnDestroy(GtkWidget *Widget, void *Data)
{
	// Supprime les objets
	delete frmMain;
	// Quitte la boucle évenementielle
	Crystal::Exit();
	// Retourne NULL
	return NULL;
}
// ----------------------------------------------------------------------------
void *cmdExit_OnClick(GtkWidget *, void *)
{
	// Détruit frmMain
	frmMain->Close();
}
// ----------------------------------------------------------------------------

Conclusion :


Les bug connus : Bein c'est la 1ère bêta, donc, c'est bourré de bug.
PS : Pour utiliser cette librairie, il faut bien évidement avoir installé GTK+ 2.x
PS2 : SA ne fait pas très longtemps que je code, et encore moins longtemps que je code en C++. Bref, s'il vous plait, ne soyez pas trop cruels en jugeant ce code ;).

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

psykocrash
Messages postés
240
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009

Voici la réponse à ton problème s'il n'est pas déjà résolu :

void Crystal::Init(void)
{
gtk_init(NULL, NULL);
}
Funto66
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Ouais c'est pas plus mal comme ça, mais dans ce cas faut adapter main.cpp pour que ça reflète cette procédure :)
cs_Light Angel
Messages postés
48
Date d'inscription
dimanche 9 mai 2004
Statut
Membre
Dernière intervention
1 janvier 2005

Bein justement, le delete, c'est pas obligatoire, en haut, au lieu de déclarer :

Form *frmMain;
Button *cmdExit;

On déclare :

Form frmMain("Main");
Button cmdExit("Quitter");

Et on ne s'enmerde pas, si jamais une fonction nécéssite un pointeur vers un Crystal ou vers un dérivé de Crystal, on s'enmerde pas, on passe &lobjet en argument ... Les pointeurs, on est pas obligé de les mettre, c'est même mieu de pas les mettres, mais j'en avais besoin pour les tests ...
Funto66
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Ouais ben en fait comme je t'ai dit j'ai réglé le pb en implémentant la fonction Close() mais j'ai mis dedans :
gtk_widget_destroy(this->Widget);

Par contre cette histoire de "delete" c'est pas super (même pas super du tout du tout); il doit y avoir moyen de faire comme avec wxWidgets, c'est à dire de faire en sorte que ce soit la librairie, et non le programmeur qui l'utilise, qui détruise les objets alloués (ne serait-ce que dans la fonction Crystal::Exit()...).
cs_Light Angel
Messages postés
48
Date d'inscription
dimanche 9 mai 2004
Statut
Membre
Dernière intervention
1 janvier 2005

voila ce qui devrai normalement être dans la fonction Close :

void Form::Close(void)
{
gtk_widget_destroy(this->Object());
}

PS : les WARNINGS dans DevC++, je ne suis pas au courant, je n'est pas testé. Quoi qu'il en soit, sous VC++, ya pas de Warnings.

PS2 : Je vien de remarquer une autre erreur dans le fichier Main.cpp, faut pas oublier de détruire cmdExit

void *cmdExit_OnClick(GtkWidget *, void *)
{
...
delete cmdExit;
...
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.