Introduction :
Dans cet article nous allons aborder l'installation de wxWidgets et son utilisation
dans l'EDI de C++ Builder 6.
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, telle 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.
Installation de la bibliothèque:
Après avoir téléchargé l'archive sur le site de
wxWidgets décompressez-là 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.
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-là.
(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 sources de la bibliothèque, qu'il va falloir compiler.
Compilation des source en ligne de commande :
La compilation s'effectuera en ligne de commande dans une console ou à l'aide de
fichiers batchs ".bat" en utilisant l'utilitaire Make.exe inclut 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 1ère 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.
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 en bleu
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é.)
// 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 é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èmes même si elles ne sont pas définies.
A 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 mis 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'
Programmez avec wxWidgets :
Pour faire vos premiers pas avec la bibliothèque, vous pouvez consulter cette série d'articles :
Initiation à wxWidgets.
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 avec 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.
|