IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Installation de wxWidgets sur Windows

Installation de wxWidgets sur Windows


précédentsommaire

III. wxWidgets et Visual C++ Express

wxWidgets propose deux moyens pour compiler avec Visual C++ : soit en ligne de commande soit avec des projets Visual. Nous allons nous intéresser à la compilation avec les projets Visual déjà définis.
Ouvrer le fichier "\wxWidgets-2.8.10\build\msw\wx.dsw". Les fichiers projets datent de la version Visual Studio 6. La version Visual Express 2008 propose de convertir les fichiers au nouveau format Visual C++ :

Conversion des projets.

Répondez 'Oui pour tout'.
Visual convertit et charge tous les projets associés. Vous obtenez la solution complète :

Solution wx.

Les fichiers relatifs aux nouveaux projets sont créés dans le répertoire "\wxWidgets-2.8.10\build\msw\" : l'ensemble des fichiers .vcproj pour chacun des projets ainsi que le .sln pour la solution.

III-A. Paramétrer la compilation

Différentes configurations sont déjà définies pour les compilations. Elles suivent le schéma suivant :

 
Sélectionnez
[DLL] [Universal] [Unicode] [Debug|Release]

La présence de 'DLL' indique la version SHARED, son absence la version STATIC.
'Universal' choisit le rendu wxWidgets. Sans cela, le rendu MSW est produit.
'Unicode' pilote la version UNICODE.
'Debug' permet la compilation de la version DEBUG et 'Release' la version RELEASE.
Nous avons choisi de générer les versions DEBUG et RELEASE des bibliothèques STATIC avec UNICODE, le port MSW et en plusieurs bibliothèques. Nous sommes donc intéressés par les configurations :

 
Sélectionnez
Unicode Debug
 
Sélectionnez
Unicode Release

Le choix de la configuration s'opère directement dans la liste déroulante de la barre d'outils en haut de l'environnement de développement :

Liste des configurations.

La configuration peut aussi être positionnée en choisissant l'item 'Gestionnaire de configurations...' du menu 'Générer' :

Liste des configurations.

Une boîte de dialogue apparaît avec la liste de tous les projets. La configuration est choisie dans la liste déroulante 'Configuration de la solution active :'

Liste des configurations.

La modification de la configuration active dans cette liste déroulante modifie automatiquement la configuration de chaque projet. Ne modifier en aucun cas individuellement la configuration d'un des projets. La case à cocher indique si le projet doit être généré (case cochée) ou non (case non cochée). Laissez toutes les cases cochées.

Une fois notre configuration choisie, nous devons également intervenir sur le fichier "\wxWidgets-2.8.10\include\wx\msw\setup.h".
En l'occurrence, nous allons modifier les directives suivantes :

  • #define wxUSE_UNICODE 1 : car nous voulons compiler avec UNICODE
  • #define wxUSE_GLCANVAS 1 : car nous voulons compiler avec OpenGL
  • #define wxUSE_ODBC 1 : car nous voulons compiler avec OBDC

A cela, nous modifions les directives suivantes :

  • #define wxUSE_STL 1 : wxWidgets définit ses propres classes pour les listes (wxList) et les tableaux (wxArray). En positionnant cette directive à 1, ces deux classes vont dériver de std::list et std::vector tirant ainsi profit de la STL.
  • #define wxUSE_STD_IOSTREAM 1 : grâce à cette directive, nous indiquons que nous souhaitons utiliser les flux de la bibliothèque standard quand cela est possible à la place des flux définis dans wxWidgets.

III-B. Compiler

Après avoir choisi la configuration 'Unicode Debug', la compilation se lance tout simplement avec l'item de menu 'Générer la solution' du menu 'Générer' :

Génération de la solution.

Les fichiers intermédiaires de la compilation (les .obj) sont générés dans "\wxWidgets-2.8.10\build\msw\vc_mswud\XXX", où XXX est le projet correspondant. Le nom du répertoire intermédiaire est composé à partir de :

  • le compilateur : 'vc' ;
  • la plateforme : 'msw' ;
  • le mode DEBUG/RELEASE : 'd' pour debug, rien pour release ;
  • le mode UNICODE : 'u' pour UNICODE.

Si nous avions choisi le mode non UNICODE, le répertoire aurait eu la forme "vc_mswd". Et comme nous allons le voir, la compilation en mode RELEASE crée le répertoire "vc_mswu".

La compilation a aussi ajouté un autre répertoire : "\wxWidgets-2.8.10\lib\vc_lib". Le schéma suivi pour le nom du répertoire ne prend en compte que le nom du compilateur utilisé. Toutes les versions des bibliothèques compilées avec un même compilateur (DEBUG, RELEASE, UNICODE, ANSI) sont mises dans ce même répertoire ce qui facilite le paramétrage de Visual. Ce répertoire contient à sa base l'ensemble des bibliothèques générées : les fichiers .lib et les fichiers pdb (information de debug) et idb (pour la recompilation minimale). Les bibliothèques générées sont :

  • wxbase28ud.lib
  • wxbase28ud_net.lib
  • wxbase28ud_odbc.lib
  • wxbase28ud_xml.lib
  • wxexpatd.lib
  • wxjpegd.lib
  • wxmsw28ud_adv.lib
  • wxmsw28ud_aui.lib
  • wxmsw28ud_core.lib
  • wxmsw28ud_dbgrid.lib
  • wxmsw28ud_gl.lib
  • wxmsw28ud_html.lib
  • wxmsw28ud_media.lib
  • wxmsw28ud_qa.lib
  • wxmsw28ud_richtext.lib
  • wxmsw28ud_xrc.lib
  • wxpngd.lib
  • wxregexud.lib
  • wxtiffd.lib
  • wxzlibd.lib

Chaque bibliothèque porte un nom suivant le schéma :

 
Sélectionnez
[nom]ud.lib

Certaines n'ont pas le suffixe 'u' dès lors qu'elles ne dépendent pas du critère UNICODE.
Toujours dans "\wxWidgets-2.8.10\lib\vc_lib" un répertoire a été créé avec les bibliothèques : "\wxWidgets-2.8.10\lib\vc_lib\mswud\wx" avec en son sein un fichier "setup.h". Il s'agit du fichier d'en-tête correspondant à la compilation. Nous verrons plus loin qu'il est important de bien configurer Visual de façon à ce que chaque ligne #include <wx/setup.h> corresponde à l'inclusion de ce fichier d'en-tête et non pas à celui dans "\wxWidgets-2.8.10\include\wx\msw\setup.h".

De façon identique, la compilation en RELEASE s'obtient en choisissant la configuration 'Unicode Release' et en demandant la génération de la solution.

Les fichiers intermédiaires sont produits dans le répertoire "wxWidgets-2.8.10\build\msw\vc_mswu".
Les bibliothèques générées dans "\wxWidgets-2.8.10\lib\vc_lib" sont les mêmes que précédemment mais sans le suffixe 'd' pour DEBUG :

  • wxbase28u.lib
  • wxbase28u_net.lib
  • wxbase28u_odbc.lib
  • wxbase28u_xml.lib
  • wxexpat.lib
  • wxjpeg.lib
  • wxmsw28u_adv.lib
  • wxmsw28u_aui.lib
  • wxmsw28u_core.lib
  • wxmsw28u_dbgrid.lib
  • wxmsw28u_gl.lib
  • wxmsw28u_html.lib
  • wxmsw28u_media.lib
  • wxmsw28u_qa.lib
  • wxmsw28u_richtext.lib
  • wxmsw28u_xrc.lib
  • wxpng.lib
  • wxregexu.lib
  • wxtiff.lib
  • wxzlib.lib

Le répertoire "\wxWidgets-2.8.10\lib\vc_lib\mswu" contient le répertoire "wx" avec son fichier "setup.h".

III-C. Paramétrer Visual C++

Commençons par créer un projet. Pour cela, nous choisissons l'item de menu 'Projet' du sous-menu 'Nouveau' du menu 'Fichier' :

Menu Fichier - Nouveau - Projet

La boîte de dialogue suivante nous permet de saisir le type de projet (Projet Win32 parmi les modèles Win32), le nom du projet, son emplacement, la solution générée :

Menu Fichier - Nouveau - Projet

L'assistant de création de projet apparaît :

Menu Fichier - Nouveau - Projet

Après avoir cliqué sur suivant, nous positionnons les paramètres de notre projet 'Application Windows' et choisissons un projet vide :

Menu Fichier - Nouveau - Projet

Pour notre fichier source, nous choisissons l'item de menu 'Ajouter un nouvel élément...' du menu 'Projet' :

Menu Fichier - Nouveau - Projet

Dans la boîte de dialogue, optons pour un 'Fichier C++' et donnons-lui son nom 'main.cpp' :

Menu Fichier - Nouveau - Projet

Copions le code suivant et sauvegardons le fichier sous main.cpp :

 
Sélectionnez
#include "wx/wx.h"
	
	// Classe application :
	class MyApp : public wxApp
	{
	public:
	   // Méthode virtuelle de démarrage de l'application :
	    virtual bool OnInit();
	};
	
	// Notre fenêtre minimale :
	class MyFrame : public wxFrame
	{
	public:
	    // Constructeur :
	    MyFrame(const wxString& title);
	
	    // 2 handler d'évènements
	    void OnQuit(wxCommandEvent& event);
	    void OnAbout(wxCommandEvent& event);
	
	private:
	    // la table des évènements
	    DECLARE_EVENT_TABLE()
	};
	
	IMPLEMENT_APP(MyApp)
	
	
	// Notre 'main' :
	bool MyApp::OnInit()
	{
	    if ( !wxApp::OnInit() )
	        return false;
	
	    MyFrame *frame = new MyFrame(_T("Minimal wxWidgets App"));
	    frame->Show(true);
	
	    return true;
	}
	
	// IDs pour nos menus et contrôles :
	enum
	{
	    Minimal_Quit = wxID_EXIT,
	    Minimal_About = wxID_ABOUT
	};
	
	// La table des évènements de notre fenêtre :
	BEGIN_EVENT_TABLE(MyFrame, wxFrame)
	    EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)
	    EVT_MENU(Minimal_About, MyFrame::OnAbout)
	END_EVENT_TABLE()
	
	
	// Le constructeur de notre classe de fenêtre :
	MyFrame::MyFrame(const wxString& title)
	       : wxFrame(NULL, wxID_ANY, title)
	{
	    // Ajoutons nos menus :
	    wxMenu *fileMenu = new wxMenu;
	    fileMenu->Append(Minimal_Quit, _T("&Quitter\tAlt-Q"), _T("Sortir du programme"));
	    wxMenu *helpMenu = new wxMenu;
	    helpMenu->Append(Minimal_About, _T("&A propos...\tF1"), _T("Affiche la boîte à propos"));
	    // dans une barre de menu :
	    wxMenuBar *menuBar = new wxMenuBar();
	    menuBar->Append(fileMenu, _T("&Fichier"));
	    menuBar->Append(helpMenu, _T("&Aide"));
	    SetMenuBar(menuBar);
	
	    // Une barre de statut :
	    CreateStatusBar(2);
	    SetStatusText(_T("Bienvenu sur notre premier projet wxWidgets avec MinGW !"));
	}
	
	
	// La gestion des évènements :
	
	void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
	{
	    Close(true);
	}
	
	void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
	{
	    wxMessageBox(wxString::Format(
	                    _T("Bienvenu avec %s!\n")
	                    _T("\n")
	                    _T("Ceci est notre application minimale\n")
	                    _T("s'exécutant sous %s."),
	                    wxVERSION_STRING,
	                    wxGetOsDescription().c_str()
	                 ),
	                 _T("A propos..."),
	                 wxOK | wxICON_INFORMATION,
	                 this);
	}

Pour cette application minimale, nous nous sommes contentés de reprendre l'exemple proposé par wxWidgets : "\wxWidgets-2.8.10\samples\minimal\minimal.cpp" que nous avons un peu simplifié pour le rendre plus lisible.

Il faut maintenant configurer correctement notre nouveau projet. La configuration d'un projet avec Visual C++ se modifie en allant chercher l'item 'Propriétés de wxProjet' du menu Projet :

Menu Fichier - Nouveau - Projet

Dans l'arbre de gauche, nous nous positionnons sur 'Propriétés de configuration', 'C/C++' et éditons la première ligne dans le tableau de droite 'Autres répertoires Include' :

Menu Fichier - Nouveau - Projet

En cliquant sur le bouton avec les trois points '...', nous accédons à une boîte de dialogue où nous pouvons ajouter nos répertoires :

Menu Fichier - Nouveau - Projet

Attention à maintenir l'ordre d'inclusion : d'abord le répertoire de génération puis le répertoire de wxWidgets.
Pour le mode DEBUG, nous ajoutons la directive de compilation __WXDEBUG__ :

Menu Fichier - Nouveau - Projet

Il faut aussi configurer les options de liens. Nous retournons dans l'arbre de gauche et choisissons l'entrée 'Propriétés de configuration', 'Editeur de liens', 'Général'. Dans le tableau de droite, l'entrée à modifier est 'Répertoires de bibliothèques supplémentaires' dans lequel nous ajoutons le répertoire où se trouve notre génération :

Menu Fichier - Nouveau - Projet

Enfin, dernier paramètre, les bibliothèques avec lesquelles nous souhaitons lier l'application. Ceci est précisé en choisissant 'Entrée' dans l'arbre de gauche et en modifiant la première ligne du tableau de droite 'Dépendances supplémentaires' où nous pouvons ajouter les deux seules bibliothèques dont nous avons besoin (wxmsw28ud_core.lib et wxbase28ud.lib). Attention à rajouter les deux bibliothèques Microsoft (comctl32.lib et rpcrt4.lib) nécessaires à notre projet :

Menu Fichier - Nouveau - Projet

Nous pouvons demander la génération de la solution et lancer l'exécution de notre application. C'est avec plaisir que nous obtenons alors :

Menu Fichier - Nouveau - Projet

Vous pouvez trouver les sources de ce projet dans l'archive suivante : ProjetProjet

III-D. Compiler les fichiers exemples

Le répertoire "\wxWidgets-2.8.10\samples\" regroupe des projets d'exemples illustrant différentes classes de wxWidgets. Chaque répertoire suit le même principe. Il contient le ou les fichiers sources ainsi que le fichier de définition du projet .dsp. Générer des exemples devient chose facile.
Placez-vous dans le répertoire '\wxWidgets-2.8.10\samples\access', ouvrez 'access.dsp', acceptez la conversion, choisissez la configuration 'Unicode Debug' et demandez la génération. La compilation d'un fichier exemple entraîne la création d'un répertoire vc_mswud contenant l'exécutable généré.

Il est possible de générer tous les exemples en une seule fois. Il suffit de se positionner sur le répertoire "\wxWidgets-2.8.10\samples". Celui-ci contient un projet 'samples.dsw' pilotant la construction de tous les exemples. Le lecteur est maintenant familier de la démarche à suivre : accepter les conversions, choisir la configuration 'Unicode Debug' et demander la génération.
La version express n'étant pas disponible avec les MFCs, le projet 'mfctest' ne peut être généré.

III-E. Pour les lecteurs pressés : résumé

  1. Télécharger wxWidgetsTéléchargement de wxWidgets
  2. Désarchiver wxWidgets (répertoire destination sans espace)
  3. Ouvrez le fichier "\wxWidgets-2.8.10\build\msw\wx.dsw" et acceptez toutes les conversions vers le nouveau format de projet
  4. Modifier le setup : "\wxWidgets-2.8.10\include\wx\msw\setup.h" :
     
    Sélectionnez
    #define wxUSE_UNICODE 1
    #define wxUSE_GLCANVAS       1
    #define wxUSE_ODBC          1
    #define wxUSE_STL 1
    #define wxUSE_STD_IOSTREAM  1
  5. Choisissez la configuration active 'Unicode Debug' et Lancez la génération
  6. Paramétrer Visual C++
    • 'Projet'/'Propriétés de wxProjet...' - Arbre de gauche : 'Propriétés de configuration', 'C/C++' - tableau de droite 'Autres répertoires Include' Ajout de "\wxWidgets-2.8.10\lib\vc_lib\mswud" et "\wxWidgets-2.8.10\include" dans cet ordre
    • 'Projet'/'Propriétés de wxProjet...' - Arbre de gauche : 'Propriétés de configuration', 'C/C++', 'Préprocesseur' - tableau de droite 'Définitions du préprocesseur', ajoute '__WXDEBUG__'
    • 'Projet'/'Propriétés de wxProjet...' - Arbre de gauche : 'Propriétés de configuration', 'Editeur de liens', 'Général' - tableau de droite 'Répertoire des bibliothèques supplémentaires' Ajout de "\wxWidgets-2.8.10\lib\vc_lib"
    • 'Projet'/'Propriétés de wxProjet...' - Arbre de gauche : 'Propriétés de configuration', 'Editeur de liens', 'Entrée' - tableau de droite 'Dépendances supplémentaires' Ajout de wxmsw28ud_core.lib, wxbase28ud.lib, comctl32.lib et rpcrt4.lib

III-F. Et avec les autres versions ?

Normalement, cette démarche doit fonctionner avec les dernières versions payantes de Visual C++ 2008. Cependant, je n'ai pas testé cette compilation avec ces produits, donc je ne peux vous garantir à 100% qu'il n'y a pas nécessité de quelques ajustements.


précédentsommaire

Copyright © 2009 3DArchi. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.