Installation et utilisation de wxWidgets avec C++ Builder

CGI

Dans cet article, nous allons aborder l'installation de wxWidgets et son utilisation dans l'EDI de C++ Builder 6.

- Titre : Installation et utilisation de wxWidgets avec C++ Builder

- Auteur : CGI

- Parution : 14 mai 2004

- Licence : Copyright 2002-2016 CGi - Tous droits réservés CGi. Toutes reproduction, utilisation ou diffusion de ce document par quelque moyen que ce soit autre que pour un usage personnel doit faire l'objet d'une autorisation écrite de la part de l'auteur, propriétaire des droits intellectuels. Les codes sources de ce document sont fournis en l'état. L'utilisateur les utilise à ses risques et périls, sans garantie d'aucune sorte de la part de l'auteur. L'auteur n'est responsable d'aucun dommage subi par l'utilisateur pouvant résulter de l'utilisation ou de la distribution des codes sources de ce document. De la même façon, l'auteur n'est en aucun cas responsable d'une quelconque perte de revenus ou de profits, ou de données, ou de tous dommages directs ou indirects, susceptibles de survenir du fait de l'utilisation des codes sources de ce document, quand bien même l'auteur aurait été averti de la possibilité de tels dommages. L'utilisation des codes sources de ce document vaut acceptation par l'utilisateur des termes de la licence ci-dessus.

Sommaire

- I. Introduction

- II. Installation de la bibliothèque

- III. Compilation de la bibliothèque

- IV. Utilisation dans l'EDI de C++ Builder

- V. Programmez avec wxWidgets

- VI. Remarques sur ce document

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.