Developpez.com - C
X

Choisissez d'abord la catégorieensuite la rubrique :



Installation et utilisation de wxWidgets avec C++ Builder

Par CGi

Le 14 mai 2004





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.





C/C++
  Les pointeurs du C/C++.   Les listes chaînées.             Liste simple.             Liste triée.             Liste double.   Les arbres.   Les tas.   Le C orienté objets ?

  1 - La fenêtre principale.   2 - Contrôles et messages.   3 - Les commandes.   4 - Dialogue std.   5 - Contexte de périph.   6 - Dessiner.   7 - Les ressources.   8 - Dialogue perso.   9 - Dialogue comm.   10 - Les accélérateurs.

Assembleur
  Assembleur sous Visual C++.

C++ BUILDER
  Trucs et astuces.   Composant.   TRichEdit.   TDrawGrid.   Application MDI.   TThread.   wxWidgets.   Style Win XP.

  Première application.   Construire un menu.   Dessiner.   Sisers, Timers...   Dialogues standards.   Dialogues perso.

DotNet
  Composant C# Builder.   Contrôle WinForm.   Application MDI.

Java
  Applet java.





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.

Contacter le responsable de la rubrique C