Introduction à wxWidgets


I) Présentation

wxWidgets est une librairie open source dont le but 1er est de permettre de créer des interfaces graphiques pour ses programmes (fenêtres, boutons...etc). Elle est portable mais les applications crées avec ont la particularité d'adopter le "look and feel" (apparence) de la plate-forme sur laquelle elles ont été compilées. Cela est dû au fait qu'en interne, wxWidgets utilise l'API propre à chaque plate-forme (API Win32 ou juste GDI sous Windows, GTK+, Motif ou directement X11 sous Linux et autres UNIXs, Carbon ou Cocoa sous Mac...). Cependant, l'équipe de wxWidgets a également mis sur pied une version spéciale de wxWidgets, wxUniversal, qui compile sous Windows, Linux et certains périphériques embarqués, et qui s'occupe entièrement de l'affichage (le "look and feel" natif de la plate-forme n'est pas forcément respecté).

Cependant, wxWidgets ne se limite pas à permettre la création d'interfaces graphiques, elle est capable de faire beaucoup d'autres choses; elle possède ses propres classes de tableau, tables de haschage, liste chaînée, elle permet de créer des applications utilisant les sockets (connections réseau), d'intégrer une zone dédiée à OpenGL dans une fenêtre pour pouvoir faire du dessin en 3D, de faire des manipulations de chaînes grâce à la classe wxString, contient une sous-librairie, wxHTML, qui permet de visualiser une page HTML, possède son propre système d'aide semblable aux CHM de Windows, peut utiliser des ressources au format XML, peut utiliser des bases de données...etc.

Et tout cela est gratuit et portable, pourquoi s'en priver ? ;)

II) Installation

Quelle que soit la plate-forme choisie, wxWidgets n'est pas livrée pré-compilée; c'est à vous de la compiler à partir des sources.

Mais avant de compiler, cherchez le fichier setup.h et modifiez-le si besoin. Ce fichier contient des #defines qui définissent comment la librairie doit être compilée. Personnellement, j'ai l'habitude de changer le :

// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise
#define wxUSE_GLCANVAS

en :

// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise
#define wxUSE_GLCANVAS

Ce qui permet d'utiliser la classe wxGLCanvas si l'on veut pouvoir créer une zone OpenGL dans une fenêtre d'un programme wxWidgets.

Ensuite, si vous êtes sous Visual C++, il lancez la compilation du projet situé dans le répertoire src. Vous avez le temps d'aller boire un café en attendant, vu que le compilateur met un certain temps à "digérer" la librairie ;)

Après, il faut aller dans le menu Tools->Options->onglet Directories, rajouter le répertoire lib lorsque "Librairies files" est sélectionné et rajouter le répertoire include lorsque "Include files" est sélectionné.

Enfin, pour créer un projet, je vous recommande de reprendre un des projets du répertoire samples qui contient de nombreux exemples et de le réutiliser.

Si vous utilisez Dev-C++, vous pouvez trouver des DevPacks ici ou compiler vous-mêmes; si vous optez pour cette solution, regardez du côté des makefiles, du fichier configure ou essayez d'importer le projet Visual C++.

[UPDATE du 23/09/04 : vous pouvez également télécharger un DevPack ICI pour wxWidgets 2.5.2, merci à fredcl ;) D'ailleurs il me fait remarquer qu'il faut impérativement désinstaller toute version précédente du DevPack avant d'installer celle-ci ^^]

Si vous êtes sous Linux, il faut faire le triplet habituel

./configure
 
make
make install

Mais renseignez-vous avant sur les options que vous pouvez passer au ./configure (notamment --with-opengl et --use-gtk2 il me semble, mailez-moi si je me trompe).

Ensuite, pour la compilation en ligne de commande on fait:

g++ mon_code.cpp -o mon_executable `wx-config --libs --cflags`

III) Premier programme

Allez c'est parti, maintenant on code !

// App.h
#ifndef APP_H
#define APP_H
 
// Le header principal de wxWidgets
#include 
 
// La classe App représente l'application
class App : public wxApp
{
public:
 
   virtual bool OnInit();  // OnInit() est l'équivalent du main() classique :
                           // c'est là que débute le programme.
 
};
 
#endif // APP_H
// App.cpp
#include "App.h"
 
// Cette macro crée l'objet global de type App qui représente l'application.
IMPLEMENT_APP(App)
 
// Equivalent de main()
bool App::OnInit()
{
   // On crée une nouvelle wxFrame (une fenêtre), avec new.
   // Notez qu'il est inutile d'appeler delete, wxWidgets le fera
   // automatiquement :)
   wxFrame* frame = new wxFrame(NULL, -1, "Hello World !");
 
   // On centre la fenêtre
   frame->Center();
 
   // On l'affiche
   frame->Show();
 
   // On précise à wxWidgets que ce sera la fenêtre principale;
   // grâce à cela il pourra détruire (delete) la fenêtre en fin d'application
   // et c'est aussi grâce à cela qu'un clic sur la croix ferme le programme
   // (et pas seulement la fenêtre).
   this->SetTopWindow(frame);
 
   // Pour finir on renvoie TRUE, ce qui signifie que l'application doit continuer
   // (et rentrer dans la boucle d'évènements).
 
   return TRUE;
}

IV) Conclusion

Voilà, ce tutorial n'est qu'une première approche à wxWidgets, normalement devraient suivre d'autres tuts sur les menus, les boutons, les listes...

Comme d'habitude, pour toute remarque/critique/suggestion, laissez un message ci-dessous ou mailez-moi à funto66 at gmail.com.

Cet article provient du tutorial publié par Funto le 08/08/2005 sur l'ancien site de Coder-Studio.

,

  1. No comments yet.
(will not be published)

  1. No trackbacks yet.