wxWidgets Framework Anfänger Problem
-
Hallo,
seid ein zwei Tagen experimentiere ich mit dem oben genannten Framework.
Nun stecke ich bei der folgenden Fehlermeldung fest.
"assert "m_frameStatusBar!=0" failed in wxFrameBase::SetStatusText(): no statusbar to set text for ... "
http://www.stud.fh-dortmund.de/~marcelz/exception.jpg
Diese tritt immer dann auf, wenn der folgende Code über ein EVT_SIZE Event aufgerufen wird.
void BasicFrame::OnSize(wxSizeEvent &event) { SetStatusText(wxT("Size")); }
Hat jemand eine Ahnung, was da falsch läuft? Die Methode OnMenuInfoAbout schreibt ohne Probleme in die Statuszeile und produziert keine Exception.
Grüße
Fireball
//base.h #ifndef BASIC_H #define BASIC_H class HalloWeltApp : public wxApp { public: virtual bool OnInit(); }; class BasicFrame : public wxFrame { private: wxPanel *panel; wxButton *button; wxMenuBar *MenuBar; wxMenu *InfoMenu; enum { MENU_INFO_ABOUT }; //Ereignis Tabelle einrichten DECLARE_EVENT_TABLE() public: BasicFrame( const wxChar *title, int xpos, int ypos, int width, int height); ~BasicFrame(); void OnClickButtonOK(wxCommandEvent &event); void OnMenuInfoAbout(wxCommandEvent &event); void OnSize(wxSizeEvent &event); }; #endif
//base.cpp #include <wx/wx.h> #include "base.h" IMPLEMENT_APP(HalloWeltApp) bool HalloWeltApp::OnInit() { BasicFrame *frame = new BasicFrame( wxT("Hallo Welt"), 50, 50, 450, 300); frame->Show(TRUE); return TRUE; } BasicFrame::BasicFrame(const wxChar *title, int xpos, int ypos, int width, int height) : wxFrame( (wxFrame *) NULL, //Parent -1, //ID title, //TITEL wxPoint(xpos, ypos), wxSize(width, height), wxDEFAULT_FRAME_STYLE) //STYLE { //hier folgen nun die Elemente //1. Panel hinzufügen panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(200, 100)); //2. Button hinzufügen button = new wxButton(panel, wxID_OK, wxT("OK"), wxPoint( 10, 10), wxDefaultSize); //3. Menü erzeugen MenuBar = new wxMenuBar(); InfoMenu = new wxMenu(); InfoMenu->Append(MENU_INFO_ABOUT, wxT("&About")); MenuBar->Append(InfoMenu, wxT("&Info")); SetMenuBar(MenuBar); //4. Statusbar erzeugen CreateStatusBar(1); } BasicFrame::~BasicFrame() { } //Ereignis Tabelle definieren BEGIN_EVENT_TABLE(BasicFrame, wxFrame) EVT_BUTTON(wxID_OK, BasicFrame::OnClickButtonOK) EVT_MENU(MENU_INFO_ABOUT, BasicFrame::OnMenuInfoAbout) EVT_SIZE(BasicFrame::OnSize) END_EVENT_TABLE() void BasicFrame::OnClickButtonOK(wxCommandEvent &event) { //Fenster wieder schließen Close(); } void BasicFrame::OnMenuInfoAbout(wxCommandEvent &event) { SetStatusText(wxT("Hier kann eine Info stehen ...")); } void BasicFrame::OnSize(wxSizeEvent &event) { SetStatusText(wxT("Size")); }
-
Ich habe einfach mal CreateStatusBar vor die Erzeugung des Menüs gesetzt. Nun tritt kein Fehler mehr auf.
Da ich mit einem Buch über diese GUI arbeite, finde ich es trotzdem komisch. Denn dort definiert der Author die CreateStatusBar nach dem Menü.
... //1. Panel hinzufügen panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(200, 100)); //2. Button hinzufügen button = new wxButton(panel, wxID_OK, wxT("OK"), wxPoint( 10, 10), wxDefaultSize); //3. Statusbar erzeugen CreateStatusBar(1); //4. Menü erzeugen MenuBar = new wxMenuBar(); InfoMenu = new wxMenu(); InfoMenu->Append(MENU_INFO_ABOUT, wxT("&About")); MenuBar->Append(InfoMenu, wxT("&Info")); SetMenuBar(MenuBar); ...
-
Klingt in der Tat komisch, aber eine Erklärung dafür habe ich auch nicht.
Hast du den Debugger mal drüber laufen lassen?