Interfaces graphiques en C++ avec wxWidget/Premier exemple
IHM en C++ avec wxWidget |
Sommaire |
Liens |
Modifier ce modèle |
Un premier exemple : ouvrir une fenêtre avec WxWidget
[modifier | modifier le wikicode]Préalable
[modifier | modifier le wikicode]- Notion de classe
- Notion de constructeurs
- Notion d'héritage
- Méthodes virtuelles
Notions abordées
[modifier | modifier le wikicode]- création de projets wxWindows
- la classe wxApp
- la classe wxFrame
- la classe wxPoint
- la classe wxSize
- les macros DECLARE_APP et IMPLEMENT_APP
Screenshot
[modifier | modifier le wikicode]Création du projet
[modifier | modifier le wikicode]Les exemples ont été créés avec wxWindows sous Windows en utilisant dev-c++ (wxDeveloppement kit version 2.4.2). Pour créer une telle application, il faut créer un projet. Sous dev-c++, il faut faire « Nouveau projet » puis choisir l'onglet GUI et finalement cliquer sur « WxWindows » et on sauvegarde dans un répertoire notre projet. Si vous travaillez sous un autre environnement, il faudra trouver la procédure qui permet de créer un projet.
Structuration en classes
[modifier | modifier le wikicode]WxWindows comporte un ensemble très complet de classes prédéfinies. Il y en a plusieurs centaines au total. Nous, nous allons créer 2 classes qui vont hériter respectivement de wxApp et de wxFrame. Ces 2 classes font partie de wxWindows. Pour les utiliser, il faudra inclure #include<wx/wx.h> dans nos fichiers .h. Nous allons spécialiser ces classes pour les adapter à notre application. Nous allons créer la classe Appli qui hérite de WxApp et la classe Win qui hérite de wxFrame.
Pour chacune de ces classes nous allons créer un fichier .h et un fichier .cpp. Nous aurons donc 4 fichiers au total :
- Appli.h
- Appli.cpp
- Win.h
- Win.cpp
La classe Appli
[modifier | modifier le wikicode]Elle hérite de la classe wxApp : il s'agit d'une application standard sous wxWindows. Elle ne correspond à aucun affichage à l'écran. Il faut donc créer une wxApp et c'est cette wxApp qui va ouvrir la fenêtre principale de notre application.
Lorsqu'on utilise wxWindow, il ne faut pas créer de main : il est créé automatiquement par différentes macros. À la fin du fichier Appli.h il faut écrire DECLARE_APP(Appli) pour indiquer que la classe Appli est la classe principale de notre application. Dans le fichier Appli.cpp, il faudra écrire IMPLEMENT_APP(Appli) pour que notre programme principal soit généré automatiquement.
Que va-t-il se passer au lancement de notre application ? Le programme va exécuter automatiquement la méthode bool OnInit() qui est une méthode virtuelle : par défaut elle ne fait rien et aucune fenêtre de notre application n'est ouverte ! Nous allons donc redéfinir cette méthode pour qu'elle ouvre la fenêtre principale de notre application. Cette méthode renvoie true si tout s'est bien passé et false sinon. Dans ce cas, l'application est détruite !
La fenêtre principale de notre application sera une instance de la classe Win. Il nous faudra donc créer une telle instance, rendre la fenêtre visible et dire que c'est la fenêtre principale de notre application.
Le fichier Appli.h est donc le suivant :
#ifndef APPLI_H
#define APPLI_H
#include<wx/wx.h>
#include"Win.h"
class Appli: public wxApp
{
public:
bool OnInit();
private:
Win * window; // Un pointeur vers notre fenêtre
};
DECLARE_APP(Appli)
#endif
Le fichier Appli.cpp est le suivant :
#include"Appli.h"
IMPLEMENT_APP(Appli)
bool Appli::OnInit()
{
window=new Win(); // Création de notre fenêtre
window->Show(TRUE); // Rendre visible notre fenêtre
SetTopWindow(window); // notre fenêtre est la fenêtre principale
return true;
}
La classe Win
[modifier | modifier le wikicode]Il s'agit d'une fenêtre standard : une fenêtre standard sous wxWindows doit hériter de wxFrame. Notre classe Win ne comportera qu'un simple constructeur. Celui-ci devra appeler le constructeur de wxFrame. Le constructeur de wxFrame doit comporter les informations suivantes :
- La fenêtre mère de notre fenêtre. En effet, nous pouvons avoir une application complexe où il y a de nombreuses fenêtres. Dans ce premier exemple, ce n'est pas le cas. Nous allons donc mettre ce paramètre à NULL.
- L'identifiant de notre fenêtre : il s'agit d'un entier qui peut être utile si notre application comporte plusieurs fenêtres. Là encore, ce paramètre n'étant pas nécessaire dans notre exemple, nous mettrons à -1 ce paramètre.
- Le nom de la fenêtre qui s'affichera dans le haut de la fenêtre. Il s'agit d'une chaîne de caractères qui vaut ici « Bonjour tout le monde ».
- La position de la fenêtre : il s'agit du coin en haut à gauche de notre fenêtre. Il faut mettre ici une instance de la classe wxPoint. Pour positionner notre fenêtre aux coordonnées 10,20, il faut écrire wxPoint(10,20) au niveau de ce paramètre.
- La taille de la fenêtre : il s'agit d'une instance de la classe wxSize. Pour que notre fenêtre ait une taille de 300x200 pixels, il faut que ce paramètre soit wxSize(300,200).
Le fichier Win.h est donc le suivant :
#ifndef WIN_H
#define WIN_H
#include<wx/wx.h>
class Win: public wxFrame
{
public:
Win();
};
#endif
Le fichier Win.cpp est donc le suivant :
#include"Win.h"
Win::Win() : wxFrame(NULL,-1,_T("Bonjour tout le monde"),wxPoint(10,20),wxSize(300,200))
{
}
Vous pouvez maintenant compiler notre application et une magnifique fenêtre va s'ouvrir.