I. Introduction▲
Tout d'abord qu'est-ce que wxWidgets ?
wxWidgets anciennement nommé wxWindows est une bibliothèque de classes destinée à la conception d'applications fenêtrées, telles que les applications Windows GUI. L'avantage de cette bibliothèque est qu'elle permet d'écrire des applications portables sur différentes plateformes (Windows, Linux, Unix, MacOs…).
Installée dans l'EDI de C++Builder elle sera plus facile d'utilisation, projets préconfigurés, achèvement du code opérationnel.
II. Installation de la bibliothèque▲
Après avoir téléchargé l'archive sur le site de wxWidgets décompressez-la dans un dossier temporaire, puis exécutez le programme d'installation « setup.exe ». Il n'y a pas grand-chose à dire sur le déroulement de l'installation, personnellement j'ai juste modifié le nom du dossier d'installation avec un nom plus court « C:/wxWin ». Nous utiliserons ce nom pour la suite de ce document.
III. Compilation de la bibliothèque▲
Avant de lancer la compilation, il faut définir une variable d'environnement nommée WXWIN et lui donner comme valeur le dossier où vous avez installé wxWidgets.
Sous Windows 9x, la définir dans l'autoexec.bat :
set WXWIN=c:\wxWin
Sous Windows XP, ouvrez le panneau de configuration puis l'applet « Système », sur l'onglet avancé cliquez sur le bouton « Variable d'environnement » et ajoutez-la.
(En rouge sur la copie d'écran ci-dessous.)
Cette opération terminée rendez-vous dans le dossier « C:\wxWin\src\msw » où vous trouverez les fichiers source de la bibliothèque, qu'il va falloir compiler.
Compilation des sources en ligne de commande
La compilation s'effectuera en ligne de commande dans une console ou à l'aide de fichiers batch « .bat » en utilisant l'utilitaire Make.exe inclus avec C++ Builder qui sert à exécuter des fichiers Make. Ceux destinés à être compilés avec C++ Builder ont l'extension « .B32 » et sont inclus dans le package.
make -f makefile.b32
La compilation peut paraître un peu longue, soyez patient…
Une fois terminée elle aura produit une librairie statique nommée « wx24ds_bcc.lib » placée dans le dossier « C:\wxWin\lib ».
Compilation d'un exemple en ligne de commande
La compilation terminée rendez-vous dans le dossier « C:\wxWin\samples\minimal », nous allons y compiler l'exemple en ligne de commande pour tester si tout fonctionne :
make -f makefile.b32
Même commande que pour la compilation des sources, car chaque exemple a ses propres fichiers Makes. Si la compilation s'est bien déroulée, elle doit avoir produit un fichier nommé « minimal.exe ».
Compilation des différentes versions de la librairie
La précédente compilation des sources avait produit la librairie Debug. Pour obtenir la librairie Release rajoutez 'FINAL=1' comme argument :
make -f makefile.b32 clean
make -f makefile.b32 FINAL=1
Produit le fichier « wx24s_bcc.lib » toujours dans le dossier « C:\wxWin\lib\ ». La 1re ligne avec l'argument clean sert à nettoyer les précédentes compilations.
Et pour produire la librairie sous forme de dll rajoutez 'DLL=1' comme argument:
make -f makefile.b32 clean
make -f makefile.b32 DLL=1 FINAL=1
Production ici de la dll: wx24_bcc.dll que vous pouvez mettre dans le dossier système de Windows et de sa librairie d'importation: « wx24_bcc.lib ».
Il y a d'autres possibilités de compilations, dans ce document je me suis limité à ces trois. (Voir le fichier « install.txt » situé dans le dossier « C:\wxWin\docs\msw »)
Problèmes rencontrés
La commande Make avec l'argument clean m'a causé un souci lors de mes premiers essais. Si vous l'exécutez après la dernière compilation, elle efface les librairies annexes du dossier « C:\wxWin\lib » comme j'ai laissé les librairies dans ce dossier, le linkeur ne les trouvait plus.
IV. Utilisation dans l'EDI de C++ Builder▲
Pour l'utiliser sans trop de contraintes dans C++ Builder, j'ai modifié le fichier header de précompilation « C:\wxWin\include\wx\wxprec.h » où j'ai rajouté les lignes dans le code ci-dessous juste après la directive '#include « wx/defs.h »' ceci afin que le linkeur sélectionne automatiquement la bonne librairie. Ceci évite d'avoir à les rajouter ou les changer si l'on change le type de compilation (debug release ou dll). Les noms des librairies peuvent être différents selon la version de la librairie. (J'ai limité la modification aux trois compilations précédemment effectuées.)
// compiler detection; includes setup.h
#include "wx/defs.h"
// Ajouté pour C++ Builder
#ifdef __BORLANDC__
#if !defined(WXUSINGDLL)
#if defined(_DEBUG)
#pragma link "wx24ds_bcc.lib" // debug
#else
#pragma link "wx24s_bcc.lib" // release
#endif
#else
#if !defined(_DEBUG)
#pragma link "wx24_bcc.lib" //dll release
#endif
#endif
#endif
Pour une utilisation encore plus aisée, nous allons créer un modèle de projet que vous pourrez utiliser ultérieurement pour créer des projets vides prêts à l'emploi. Pour arriver à nos fins, nous utiliserons le référentiel d'objets. (Voir capture d'écran ci-dessous.)
Tout d'abord créer un dossier nommé « wxWidgets » ou d'un nom de votre choix dans le dossier « ObjRepos » de C++ Builder et placer le fichier « mondrian.ico » que vous trouverez dans wxWidgets dans ce dossier. Créer un nouveau projet par l'intermédiaire de l'expert Console. (Menu : Fichier -> Nouveau -> Autres… -> Onglet Nouveau -> Expert Console.) Dans la boîte de dialogue « Expert Console », seul doit rester coché le bouton radio « C++ » faire 'OK'.
Effacer le contenu du fichier source « .cpp » et remplacer par :
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
//------------------------------------------------------------------------------
#include "wxWin.h"
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame(_T("Minimal wxWindows App"),
wxPoint(100, 100), wxSize(480, 360));
frame->Show(TRUE);
return TRUE;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
long style) : wxFrame(NULL, -1, title, pos, size, style)
{
}
Faire enregistrer, dans le dossier wxWidgets préalablement créé, changer le nom du fichier en « wxWin.cpp ».
Puis créer un fichier header avec :
#ifndef wxWinH
#define wxWinH
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
class MyFrame : public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
long style = wxDEFAULT_FRAME_STYLE);
private:
};
#endif //wxWinH
Enregistrer toujours dans le même dossier sous le nom « wxWin.h ».
Nous allons maintenant éditer les options de projet.(Menu: Projet -> Options…)
Onglet
Application : sélectionner l'icône « mondrian.ico ».
Compilateur : cocher 'Traiter enum comme int (z)' (Impératif) et cocher l'avertissement W8057 (bouton 'Avertissements').
Options avancées du compilateur : mettre Alignement des données à Byte (impératif).
C++ : décocher 'Classe de base vide long. zéro' et 'Membres classes vide long. Zéro'.
Répertoire/Conditions : dans chemin d'inclusion ajouter le dossier « include » de wxWidgets « C:\wxWin\include » (Impératif), dans chemin de bibliothèque ajouter le dossier lib de wxWidgets « C:\wxWin\lib » (impératif).
Pour les définitions conditionnelles, quelques sites Internet en donnent une liste à définir, après quelques tests que j'ai effectués, la plupart se trouvaient être déjà définies sauf __WXWIN__ et USE_DEFINE dont je n'ai trouvé trace et la compilation s'effectue sans problème, même si elles ne sont pas définies. À voir au cas par cas, il est probable que selon les versions de wxWidgets et C++ Builder, il y ait des différences.
La constante _DEBUG est automatiquement ajoutée selon que vous sélectionnez le mode Débogage ou non (version finale) dans le projet.
Fermer la boîte de dialogue Projet par 'OK' puis sauvegarder le projet toujours dans le même dossier sous le nom « wxWinProjet.bpr » (le nom du projet sans l'extension ne doit pas être le même que celui du fichier source sans l'extension).
Tout en gardant le projet ouvert, nous allons l'ajouter au référentiel pour qu'il apparaisse dans la boîte de dialogue Nouveau Projet, comme la copie d'écran au début de ce paragraphe. Pour cela faire Menu : Projet -> Ajouter au référentiel, remplir la boîte de dialogue comme la copie d'écran ci-dessous sélectionner l'icône que l'on avait mise dans le dossier et faire OK.
Fermer le projet.
Maintenant créons un nouveau projet selon le modèle préalablement défini. Menu : Fichier -> Nouveau -> Autres… Onglet Projet sélectionner l'icône Application wxWidgets, ceci ouvre une boîte de sélection de répertoire. Positionnez-vous dans le dossier où vous voulez créer votre application et faites OK.
Vous pouvez déjà compiler votre projet vide, il doit vous créer une fenêtre Windows. Si vous voulez le compiler en utilisant la dll, il faudra définir la constante de compilation conditionnelle 'WXUSINGDLL=1'.
V. Programmez avec wxWidgets▲
Pour faire vos premiers pas avec la bibliothèque, vous pouvez consulter cette série d'articles : Initiation à wxWidgets.
VI. Remarques sur ce document▲
Ce document relate l'installation de wxWidgets telle que je l'ai vécue. C'est-à-dire celle de la version 2.4.2 avec C++ Builder 6 sous Windows XP. Il est possible qu'il y ait des différences sous d'autres configurations.
Vous pouvez vous référer à la documentation incluse dans le package notamment le fichier install.txt dans le dossier « C:\wxWin\docs\msw » pour plus de précisions sur l'installation. Pour l'utilisation de la bibliothèque des fichiers d'aide très complets (malheureusement en anglais) ainsi que de nombreux exemples accompagnent le package.
Bonne installation,
CGi
Avec la contribution d'Anomaly pour la relecture.