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