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);
    
    ...
    

  • Mod

    Klingt in der Tat komisch, aber eine Erklärung dafür habe ich auch nicht.
    Hast du den Debugger mal drüber laufen lassen?


Anmelden zum Antworten