Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUM C++ FAQs C++ TUTORIELS C++ LIVRES C++ COMPILATEURS C++ SOURCES C++ Qt


wxWidgets

2 - Construire un menu avec wxWidgets.

Par CGi

Le 23 mai 2004





Introduction :

Dans le chapitre précédent nous avions abordé la construction d'une fenêtre et la gestion d'événements à l'aide de la bibliothèque wxWidgets. Dans celui-ci nous allons reconstruire la même application, mais les événements seront déclenchés par l'intermédiaire de menus.






Explication :

La construction de la fenêtre sera identique à celle du précédent chapitre, nous ne reviendrons donc pas dessus. Pour la construction de notre menu, nous utiliserons comme pour les boutons du chapitre précédent des constantes pour identifier les options de menu. Dans cet exemple elles seront les éléments d'une énumération :

enum
{
    App_Quit = 1,
    Chgt_Titre
};

Nous aurions pu utiliser là aussi des constantes symboliques.
Une table d'événements est là aussi élaborée de manière semblable :

BEGIN_EVENT_TABLE(TMyFrame, wxFrame)
    EVT_MENU(App_Quit,  TMyFrame::OnQuit)
    EVT_MENU(Chgt_Titre, TMyFrame::OnChgTitre)
END_EVENT_TABLE()

Venons-en à l'essentiel, la construction du menu. Pour cela nous déclarons un pointeur sur un menu 'menuFichier' et un pointeur sur une barre de menu 'menuBarre' dans le prototype de la classe TMyFrame :

class TMyFrame : public wxFrame
{
public:
    TMyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
                                           long style = wxDEFAULT_FRAME_STYLE);
    void OnQuit(wxCommandEvent& event);
    void OnChgTitre(wxCommandEvent& event);
private:
    wxMenu *menuFichier;
    wxMenuBar *menuBarre;

DECLARE_EVENT_TABLE()
};

La construction du menu se fera dans le constructeur de TMyFrame :

TMyFrame::TMyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
                        long style) : wxFrame(NULL, -1, title, pos, size, style)
{
    menuFichier = new wxMenu;
    menuFichier->Append(Chgt_Titre,"Changer le titre.");
    menuFichier->AppendSeparator();
    menuFichier->Append(App_Quit,"Quitter l'application.");

    menuBarre = new wxMenuBar();
    menuBarre->Append(menuFichier,("&Fichier"));

    SetMenuBar(menuBarre);
}

Ceci en créant tout d'abord le menu par un new, puis nous lui ajoutons à l'aide de sa méthode Append les options de menu avec comme paramètres leur constante d'identification puis leur texte. Les séparateurs étant ajoutés par la méthode AppendSeparator. Comme vous avez pu le remarquer les options de menu n'ont pas besoin d'être créées par un new.
Ensuite nous créons la barre de menu 'menuBarre' puis nous lui ajoutons le menu créé précédemment avec sa méthode Append dont le premier paramètre est le pointeur de menu précédemment créé.
Pour terminer nous ajoutons le menu à la fenêtre à l'aide de sa méthode SetMenuBar qui reçoit comme paramètre le pointeur de la barre de menu.
La destruction des menus est effectuée par l'application comme pour les boutons du chapitre précédent.

Code source complet:

wxwin1.h :


#ifndef wxWin1H
#define wxWin1H
//------------------------------------------------------------------------------
class TMyApp : public wxApp
{
public:
    virtual bool OnInit();
};
//------------------------------------------------------------------------------
class TMyFrame : public wxFrame
{
public:
    TMyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
                                           long style = wxDEFAULT_FRAME_STYLE);
    void OnQuit(wxCommandEvent& event);
    void OnChgTitre(wxCommandEvent& event);
private:
    wxMenu *menuFichier;
    wxMenuBar *menuBarre;

DECLARE_EVENT_TABLE()
};

enum
{
    App_Quit = 1,
    Chgt_Titre
};
//------------------------------------------------------------------------------
#endif //wxWin1H

wxwin1.cpp :


#include "wx/wxprec.h"

#ifdef __BORLANDC__
    #pragma hdrstop
#endif

#ifndef WX_PRECOMP
    #include "wx/wx.h"
#endif
//------------------------------------------------------------------------------
#include "wxWin1.h"

BEGIN_EVENT_TABLE(TMyFrame, wxFrame)
    EVT_MENU(App_Quit,  TMyFrame::OnQuit)
    EVT_MENU(Chgt_Titre, TMyFrame::OnChgTitre)
END_EVENT_TABLE()

IMPLEMENT_APP(TMyApp)
//------------------------------------------------------------------------------
bool TMyApp::OnInit()
{
    TMyFrame *frame = new TMyFrame("Ma première application",
                                           wxPoint(150, 150), wxSize(480, 360));
    frame->Show(true);
    return true;
}
//------------------------------------------------------------------------------
TMyFrame::TMyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
                        long style) : wxFrame(NULL, -1, title, pos, size, style)
{
    SetIcon(wxICON(monicone));
    SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));

    menuFichier = new wxMenu;
    menuFichier->Append(Chgt_Titre,"Changer le titre.");
    menuFichier->AppendSeparator();
    menuFichier->Append(App_Quit,"Quitter l'application.");

    menuBarre = new wxMenuBar();
    menuBarre->Append(menuFichier,("&Fichier"));

    SetMenuBar(menuBarre);
}
//------------------------------------------------------------------------------
void TMyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
    Close(true);
}
//------------------------------------------------------------------------------
void TMyFrame::OnChgTitre(wxCommandEvent& WXUNUSED(event))
{
    SetTitle("Nouveau Titre");
}
//------------------------------------------------------------------------------



Remarques sur ce document :

Ce document relate la réalisation d'une application simple. J'ai réalisé les compilations dans l'EDI de C++ Builder, wxWidgets étant installé comme vu dans l'article : "Installation de wxWidgets dans l'EDI de C++ Builder".
Pour les autres compilateurs veuillez vous référer à leur documentation respective ainsi qu'à la documentation de wxWindows.


A bientôt,

CGi

Avec la contribution d'Alacazam pour la relecture.

Sommaire



C/C++

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

API Windows

  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.

C++ BUILDER

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

wxWidgets

  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-2007 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.

Responsable bénévole de la rubrique C++ : hiko-seijuro - Contacter par EMail :
Vos questions techniques : forum d'entraide C++ - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.