2016-05-20 16 views
1

Wie oben erwähnt, versuche ich eine sehr einfache Anwendung FLTK 1.3.3 zu arbeiten. Aber selbst mit nur einem einfachen Fl_Window und 1 Fl_Button scheint nichts zu funktionieren. Kann jemand helfen?Fl_Window Unterklasse funktioniert nicht

class MainEditorWindow : public Fl_Window 
{ 
public: 
    MainEditorWindow(int _width, int _height, std::string _title); 
    ~MainEditorWindow(); 

    virtual void draw(); 
    virtual int handle(int _event); 
private: 
    Fl_Button* m_btnExit; 
}; 

Und hier ist die Umsetzung

MainEditorWindow::~MainEditorWindow() 
{ 

} 

int MainEditorWindow::handle(int _event) 
{ 
    return 1; 
} 

void MainEditorWindow::draw() 
{ 
    m_btnExit->redraw(); 
} 

MainEditorWindow::MainEditorWindow(int _width, int _height, std::string _title) : Fl_Window(_width, _height, _title.c_str()) 
{ 
    this->begin(); 
    m_btnExit = new Fl_Button(0, 0, 40, 40, "EXIT"); 
    m_btnExit->color(FL_RED); 
    this->color(FL_WHITE); 
    this->end(); 
} 

Aber wenn einfach die Anwendung wie folgt ausgeführt werden:

int main(int argc, char** argv) 
{ 
    MainEditorWindow* mw = new MainEditorWindow(800, 600, "SHIP Editor"); 
    mw->show(argc,argv); 
    return Fl::run(); 
} 

Das Fenster zeigt sich fein, dessen Größe veränderbar beweglich, um die beschriebenen draw() - Funktion wird gerufen und all das. Aber das Fenster selbst ist nur leer. Es zeigt einfach nichts, vor allem nicht die Fl_Button. Kann mir jemand sagen, warum das passiert? Soweit ich das beurteilen kann, sollte mein Code nicht besonders falsch sein.

+0

Sie nicht, müssen Sie die Taste, um das Fenster in einige hinzufügen Weg? –

+0

@Hedanito Erstellen Widgets zwischen 'begin()' und 'und()' tut genau das. – calcyss

+0

Ich kann mir nur die Threading Gefahren vorstellen: | –

Antwort

1

Sie müssen Fl_Window anrufen :: Draw()

void MainEditorWindow::draw() 
    { 
     m_btnExit->redraw(); 
     Fl_Window::draw(); 
    } 

Und vielleicht möchten Sie auf die Schaltfläche angeklickt ist zu

int MainEditorWindow::handle(int _event) 
    { 
     //return 1; 
     return(Fl_Window::handle(_event)); 
    } 
0

Versuchen Sie dies in Ihrem MainEditorWindow Konstruktor:

MainEditorWindow(int _width, int _height, const std::string& _title) 
     : Fl_Window(_width, _height, _title.c_str()) { 
    // begin grouped GUI object creation 
    Fl_Group::begin(); 
    // alter x,y coords of button as necessary 
    m_btnExit = new Fl_Button(0,0,40,40,"EXIT"); 
    m_btnExit->color(FL_RED); 
    // end grouped GUI object creation 
    Fl_Group::end(); 
    // defines resizable widget for group 
    Fl_Group::resizable(this); 
    this->color(FL_WHITE); 
    // display window 
    Fl_Window::show(); 
} 

Dann in Haupt:

int main(int argc, char** argv) { 
    MainEditorWindow mw(800, 600, "SHIP Editor"); 
    return Fl::run(); 
} 

Hier haben wir die Schaltfläche zu einer Gruppe hinzugefügt und dann aufgerufen Fl_Window::show() innerhalb des Konstruktors um es anzuzeigen.

Hinweis: Es ist nicht erforderlich, mw einen Zeiger auf MainEditorWindow in main zu machen.

+0

hm ... anscheinend hat das nicht funktioniert:/ – calcyss

+0

@calcyss Versuchen Sie, die (x, y) -Koordinaten der Schaltfläche zu ändern (erste 2 Argumente von 'Fl_Button' Konstruktor) – ArchbishopOfBanterbury

+0

Das Problem scheint mit der Unterklasse von' zu sein Fl_Window'. Ich habe einfach versucht, ein 'Fl_Window' zu erstellen und einen Button hinzuzufügen, der funktioniert. – calcyss

Verwandte Themen