Application gui multi-plateforme orienté objet[dev-c++]

Contenu du snippet

Pour utiliser cette source, vous devez telecharger le kit de developpement wxWindows sur le site de Dev-C++.
Lancez ensuite le modèle d'application wx, puis remplacez les fichiers créés par ceux du tutorial; vous aurez alors votre projet configuré.
L'interet de ce kit par rapport à GTK est qu'il utilise les fonctions de chaque OS pour créer les fenetres par rapport à GTK qui se contente de "dessiner" ce qui peut produire certains artefacts graphiques pas tres jolis. De plus tou est orienté objet ce qui est super utile en programmation (pour ceux qui connaissent)...

Source / Exemple :


// main.h

#ifndef _MAIN_H_
#define _MAIN_H_

#include <wx/wx.h> // le header principal pour wx

class MainApp : public wxApp // la classe application est le point d'entrée du programme
{
public:
    virtual bool OnInit(void); // on surcharge OnInit
};

class AppFrame : public wxFrame // on peut utiliser wxFrame telle quelle mais on la dérive pour gerer nos propres evenements
{
public:
    AppFrame(const wxString &title, const wxPoint &pos, const wxSize &size);// constructeur

    void OnQuit(wxCommandEvent &event); // evenement "l'utilisateur veut quitter"
    void OnAbout(wxCommandEvent &event); // evenement "l'utilisateur clique sur le menu 'A props'"
private:
    DECLARE_EVENT_TABLE()
};

enum // l'enum permet de creer un type d'entiers scalaires; c'est plus pratique qu'un #define car  ca s'auto incrémente
{
    MainApp_Quit = 1,// ID des evenements
    MainApp_About
};

BEGIN_EVENT_TABLE(AppFrame, wxFrame)//on definit les evenements pour la classe wxAppFrame dérivée de wxFrame
    EVT_MENU(MainApp_Quit,  AppFrame::OnQuit)//On associe chaque ID d'evenement avec une fonction
    EVT_MENU(MainApp_About, AppFrame::OnAbout)
END_EVENT_TABLE()

#endif _MAIN_H__

// main.cpp

#include <wx/wx.h>
#include "main.h"

IMPLEMENT_APP(MainApp) // wx se debrouille pour initialiser le programme avec notre classe MainApp

bool MainApp::OnInit()
{
    AppFrame *frame;

    frame = new AppFrame("La super application!", wxPoint(50, 50), wxSize(450, 340));// creation de la fenetre
    frame->Show(TRUE);// et on l'affiche

    return TRUE; // si on retourne false, le programme s'arrete
}

AppFrame::AppFrame(const wxString &title, const wxPoint &pos, const wxSize& size)
  : wxFrame ((wxFrame *) NULL, -1, title, pos, size)
{
    wxMenuBar *menuBar;
    wxMenu *fileMenu;
    
    SetIcon(wxICON(A));// A est le nom donné à l'icone principale par Dev-C++

    fileMenu = new wxMenu("", wxMENU_TEAROFF);
    fileMenu->Append(MainApp_About, "&A propos...\tCtrl-A", "Montre la fenetre \'A propos\'");
    fileMenu->Append(MainApp_Quit, "&Quitter\tCtrl-Q", "Quitter le programme");
// on Ajoute des menus au menu "Fichier" dans la barre; l'ordre compte
// Parametres : ID de l'evenement à lancer, chaine à afficher+raccourci clavier, chaine à afficher dans la barre de statut
    menuBar = new wxMenuBar();
    menuBar->Append(fileMenu, "&Fichier");
// on attahce le menu fichier à la barre de menu

    SetMenuBar(menuBar);// on associe la barre de menu à notre fenetre
    CreateStatusBar(2);// on crée une barre de statut pour notre fenetre
    SetStatusText("En attente.");// on donne le texte par defaut de la barre de statut
}

// evenements

void AppFrame::OnQuit(wxCommandEvent &WXUNUSED(event))
{
    Close(TRUE);// si l'utilisateur veut quitter, on ferme la fenetre
// mais on peut aussi lui poser un question("voulez-vous enregistrer/quitter?"...)
}

void AppFrame::OnAbout(wxCommandEvent &WXUNUSED(event))
{
    wxString msg;

    msg.Printf("Mon App version tutorial");
    wxMessageBox(msg, "Créé par Kami, visitez http://dreamproject.free.fr/", wxOK | wxICON_INFORMATION, this);
// un equivalent du MessageBox sous Windows
}

Conclusion :


L'executable produit sera assez gros mais vous pouvez <réduire> sa taille en utilisant une dll externe. Pour cela il faut specifier un truc du genre #define WX_DLLEXPORT
Je n'ai jamais réussi à le faire fonctionner donc si vous y parvenez laissez un message.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.