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:
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:
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:
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