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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxWidgets Discussion :

Event dans une classe fille de wxMenuBar


Sujet :

wxWidgets

  1. #1
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut Event dans une classe fille de wxMenuBar
    Bonjour,

    afin de structurer un peu mon code j'ai decider de creer une classe propre a la menu bar afin que celle ci ne soit pas dans MainFrame.cpp.

    Le problème c'est que je n'ai plus d'events qui marche et je ne comprend pas du tout pk! Et dans tous les exemples que je lis l'EVENT_TABLE se trouve soit dans un heritier de wxFrame soit dans un heritier de wxPanel. J'aimerais donc savoir si il est possible de d'utiliser EVENT_TABLE depuis un autre type de classe ??? (Et si son utilisation est bien limitée aux classes héritant de wxEvtHandler)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    /* MainMenuBar.hpp */
    class MainMenuBar: public wxMenuBar {
    public:
    	MainMenuBar(wxFrame* wparent);
    	virtual ~MainMenuBar();
     
    	void OnQuit(wxCommandEvent& event);
    	void OnAbout(wxCommandEvent& event);
    	void OnProperties(wxCommandEvent& event);
     
    private:
    	wxFrame* wparent;
    	wxMenu *menuFile;
    	wxMenu *menuPref;
    	wxMenu *menuHelp;
    	DECLARE_EVENT_TABLE()
    };
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    /*MainMenuBar.cpp */
    #include "MainMenuBar.hpp"
    BEGIN_EVENT_TABLE(MainMenuBar, wxMenuBar)
    	//File Menu
    	EVT_MENU(wxID_EXIT, MainMenuBar::OnQuit)
    	//Preferences Menu
    	EVT_MENU(wxID_PROPERTIES,MainMenuBar::OnProperties)
    	//Help Menu
    	EVT_MENU(wxID_ABOUT, MainMenuBar::OnAbout)
    END_EVENT_TABLE()
     
    MainMenuBar::MainMenuBar(wxFrame *wparent):
    	wparent(wparent)
    {
     
    	//File Menu
    	menuFile = new wxMenu();
    	menuFile->Append(wxID_EXIT, _T("E&xit") );
    	this->Append(menuFile,_T("&File") );
     
    	//Preference Menu
    	menuPref = new wxMenu();
    	menuPref->Append(wxID_PROPERTIES,_T("&Properties"));
            this->Append(menuPref,_T("Preferences"));
     
    	//Help Menu
    	menuHelp = new wxMenu();
    	menuHelp->Append(wxID_ABOUT, _T("&About...") );
    	this->Append(menuHelp,_T("Help"));
     
    }
     
    void MainMenuBar::OnQuit(wxCommandEvent& WXUNUSED(event))
    {
    	wparent->Close(TRUE);
    }
     
     
    void MainMenuBar::OnProperties(wxCommandEvent& WXUNUSED(event)) {
    	Properties *prop = new Properties(wparent);
    	prop->Show(true);
    }
     
    void MainMenuBar::OnAbout(wxCommandEvent& WXUNUSED(event)) {
    	wxString msg(_T("Vicia - Version 0.1"));
    	wxMessageBox(msg, wxT("About Vicia"),	wxOK | wxICON_INFORMATION, this);
    }
    J'ai aussi essayer avec Connect au lieu de EVENT_TABLE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     MainMenuBar::MainMenuBar(wxFrame *wparent) {
    ...
    this->Connect(wxID_PROPERTIES,wxEVT_MENU_OPEN,wxCommandEventHandler(MainMenuBar::OnProperties));
    }
    mais visiblement ca ne marche pas non plus


    Voila et merci encore

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Dans le Connect il faut utiliser wxEVT_COMMAND_MENU_SELECTED et pas wxEVT_MENU_OPEN.

    Un héritage ne gène pas en principe.

  3. #3
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    Merci, j'essayerais demain!

    Mais alors pourquoi l'event table ne marche pas ???

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je viens de comprend l'autre erreur en relisant.

    Il ne faut pas se connecter sur wxMenuBar mais sur la MainFrame

    Donc remplacer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->Connect(wxID_PROPERTIES,wxEVT_MENU_OPEN,wxCommandEventHandler(MainMenuBar::OnProperties));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wparent->Connect(wxID_PROPERTIES,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(MainMenuBar::OnProperties),0,this);

  5. #5
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    Okay c'est bien ca l'erreur! donc je reviens a ma question du depart!

    Quelle sont les classes qui acceptent le Connect ??? Est-ce que seul les classes qui acceptent Connect peuvent avoir une ËVENT_TABLE.

    Merci encore pour ton aide!

  6. #6
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Toutes les classes GUI wxWidgets acceptes un "Connect".
    Mais parfois, comme ici pour "wxMenuBar", les events sont directement lancé dans la MainFrame.

    Les macros c'est bien au départ, mais au final on ne les utilise plus, car "Connect" est beaucoup plus souple d'utilisation.

  7. #7
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    Okay, merci encore de ton aide si precieuse!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel de méthode protected dans une classe fille
    Par Le Mérovingien dans le forum C++
    Réponses: 11
    Dernier message: 05/06/2012, 17h04
  2. Affichage de paramètre saisi dans une classe fille
    Par randy17 dans le forum Général Java
    Réponses: 16
    Dernier message: 04/07/2010, 18h12
  3. Réponses: 1
    Dernier message: 06/11/2009, 01h20
  4. Réponses: 4
    Dernier message: 16/03/2008, 19h06
  5. Initialisation const dans une classe fille
    Par cyberjoac dans le forum C++
    Réponses: 3
    Dernier message: 07/10/2007, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo