Copyright © 2003 Nowicki Christophe
| Historique des versions | ||
|---|---|---|
| Version 1.1 | 26/02/2004 | |
| s/wxWindows/wxWidgets/g ;( | ||
| Version 1.0 | 27/10/2003 | |
| Version initiale | ||
Bloodshed Dec-C++ est libre et écrit en Delphi pour Microsoft Windows. Il utilise le portage Mingw des outils GNU dont le fameux GCC (GNU Compiler Collection). Il dispose des fonctionnalités suivantes :
Débugger intégré
Gestion de projet
Colorisation syntaxique personnalisable
Navigateur de classe C++
Profiler
Création de fichiers Makefile
Création de modèles pour ses propres projets
Editer et compiler les ressources
Support de CVS (Concurrent Versions System)
Il est possible de le télécharger librement sur le site de Bloodshed Software. La version actuelle est la 5.0 beta 8 (4.9.8.0).
wxWidgets est une API C++ libre multiplateforme (Unix, Windows et Mac). Elle a l'énorme avantage d'être sous License LGPL (acronyme de Library General Public Licence) et donc permettre la redistribution de binaires. De plus, elle utilise l'interface graphique native sur chaque système d'exploitation.
Voila la liste des avantages offerts par wxWidgets :
Libre
Orienté objet
Portable (Windows, Unix et Mac)
Fonctionne avec la plupart des compilateurs C++
Une interface Python (wxPython)
Bien documenté
Si nous voulez avoir un aperçu de toutes les possibilitées de cette API je vous propose de vous référer aux documents officiels :
Pour l'installation de wxWidgets vous avez le choix entre : recompiler les sources a l'aide de Dev-C++ ou bien télécharger les DevPacks. Les DevPacks sont des modules pour Dev-C++ qui contiennent les librairies wxWidgets compilées et les modèles des projets d'applications qui utilisent wxWidgets. Les DevPacks wxWidgets pour Dev-C++ sont téléchargeables sur la page personnelle de Michel Weinachter :
Les "DevPacks" wxWidgets pour Dev-C++
Vous devez télécharger les trois DevPacks suivants :
wxWidgets 2.4.0
imagelib
wxWidgets 2.4.0 contribs
L'installation de Dev-C++ ne pose aucun problème. Il suffit de choisir une installation dite Typical et choisir le répertoire d'installation. Une fois l'installation terminée vous pouvez choisir votre thème et la langue. Vous pouvez choisir anglais ou bien français.
Pour installer les DevPacks il suffit de cliquer sur :
Puis d'installer les DevPacks dans l'ordre suivant : imagelib, wxWidgets, wxWidgets-contrib.
Une fois les trois DevPacks installés il suffit de cliquer sur :
Puis sur :
->

Il ne reste plus qu'à choisir le nom de votre nouveau projet et de le sauvegarder dans un répertoire de travail. Une fois le projet créé vous devez voir un fichier main.cpp avec le code d'une application wxWidgets minimal. Il faut sauvegarder le fichier :
Il ne vous reste plus qu'à compiler et exécuter celle-ci :
Si la compilation s'est bien passée vous devez voir apparaître la fenêtre suivante :

Nous allons analyser le code génére automatiquement par Dev-C++. Tout d'abord il faut inclure les fichiers d'entête de wxWidgets. Vous avez le choix entre inclure un gros fichier qui contient toutes les class wxWidgets (#include "wx/wx.h") ou bien inclure seulement les class dont votre application a besion (ex : #include "wx/window.h" et #include "wx/menu.h"). Pour les compilateurs qui supportent les fichiers d'entête précompilés il est possible d'utiliser la version précompilé. (#include "wx/wxprec.h")
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
Chaque application definit une classe dérivée de la classe wxApp. En utilisant la méthode virtuelle OnInit() de la classe wxApp, on peux initialiser notre application. Créer la fenêtre principale par exemple.
class MyApp: public wxApp
{
virtual bool OnInit();
};
Pour créer la fenêtre principale de l'application il suffit d'utiliser la même méthode : dériver une classe de la classe wxFrame. Dans le constructeur de cette nouvelle classe vous pouvez créer un menu est une barre des statuts. Cette fenêtre doit pouvoir repondre aux évènements envoyés par l'utilisateur (comme le bouton de la souris, les menus ou les boutons). Pour répondre à ces évènements, la classe doit contenir une table d'évènement (DECLARE_EVENT_TABLE).
class MyFrame: public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
private:
DECLARE_EVENT_TABLE()
};
Pour chaque évènement il faut donner un identifiant unique, à l'aide d'une constante ou bien d'un enum.
enum
{
ID_Quit = 1,
ID_About,
};
Il faut implémenter les handler des differents évènement de la classe wxFrame a l'aide de macros. Il n'a pas besoin de gérer tous les évènement que peut recevoir la class car il y a un handler d'évènement générique par défaut pour chaque évènement.
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()
Tous les progammes doivent avoir une fonction d'entrée principale (main). Celle-ci est implémentée à l'aide d'une macro qui crée une instance de l'objet qui représente votre application.
IMPLEMENT_APP(MyApp)
Après la création de l'instance de wxApp la méthode OnInit() est appeler. Vous pouvez l'utiliser cette methode pour initialiser le programme, afficher un "splash screen" et créer la ou les fenêtres principales.
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame( "Hello World", wxPoint(50,50), wxSize(450,340) );
frame->Show( TRUE );
SetTopWindow( frame );
return TRUE;
}
Dans ce constructeur de la fenêtre principale nous pouvons créer un menu et une barre de statuts.
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
wxMenu *menuFile = new wxMenu;
menuFile->Append( ID_About, "&About..." );
menuFile->AppendSeparator();
menuFile->Append( ID_Quit, "E&xit" );
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, "&File" );
SetMenuBar( menuBar );
CreateStatusBar();
SetStatusText( "Welcome to wxWidgets!" );
}
Il nous reste plus qu'à écrire les méthodes pour la gestion des évènements. MyFrame::OnQuit() ferme la fenêtre, s'il n'y a pas d'autres fenêtres ouvertes par l'application, celle-ci se termine automatiquement.
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(TRUE);
}
MyFrame::OnAbout() va afficher un boite de dialog avec un message dedans.
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox( "This is a wxWidgets' Hello world sample",
"About Hello World", wxOK | wxICON_INFORMATION );
}
Vous avez réussi a faire une application wxWidgets basique. Pour mieux comprendre le fonctionnement de l'API et aller plus loin il faut se plonger dans les manuels de référence de l'API. Mais aussi sur le forum dédié à la programmation en wxWidgets avec Dev-C++.