2016-05-20 2 views
1

上記のように、私は非常に簡単なFLTK 1.3.3アプリケーションを動かそうとしています。 しかし、単純なFl_Windowと1 Fl_Buttonであっても、何も動作していないようです。誰も助けることができますか?Fl_Windowサブクラスが機能しない

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; 
}; 

そして、ここで実装

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(); 
} 

である。しかし、単純にこのようなアプリケーションの実行時に:

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

をウィンドウは罰金、そのサイズ変更可能な可動など、draw()現れ - 機能と呼ばれています。しかしウィンドウ自体はただです。これは何も表示しません。特にFl_Buttonは表示されません。誰が私になぜこれが起こるのか教えていただけますか?私が知る限り、私のコードには特に何も間違いがないはずです。

+0

あなたは、いくつかのウィンドウにボタンを追加する必要はありません。方法? –

+0

@Hedanitoは 'begin()'と 'and()'の間でウィジェットを作成するのとまったく同じです。 – calcyss

+0

私はスレッドの危険性を想像することができます:| | –

答えて

1

あなたはFl_Windowを呼び出す必要があります::ドロー()

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

そして多分あなたはボタンがクリック可能である必要はあまりにも

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

は、あなたのMainEditorWindowコンストラクタでこれを試してみてください:

その後
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(); 
} 

メインに:

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

ここでは、グループにボタンを追加し、それを表示するには、コンストラクタ内Fl_Window::show()を呼び出しています。

mwMainEditorWindowへのポインタをmainにする必要はありません。

+0

hm ...明らかにこれはうまくいきませんでした:/ – calcyss

+0

@calcyssボタンの(x、y)座標を変更しようとしました( 'Fl_Button'コンストラクタの最初の2つの引数) – ArchbishopOfBanterbury

+0

問題は' Fl_Window'。私は単純に 'Fl_Window'を作成し、それにボタンを追加しようとしました。 – calcyss

関連する問題