C++ Fl#U窗口子类不';行不通

C++ Fl#U窗口子类不';行不通,c++,user-interface,fltk,C++,User Interface,Fltk,如上所述,我正试图让一个极其简单的FLTK 1.3.3应用程序正常工作。 但是,即使只有一个简单的Fl_窗口和一个Fl_按钮,似乎什么都不起作用。有人能帮忙吗 class MainEditorWindow : public Fl_Window { public: MainEditorWindow(int _width, int _height, std::string _title); ~MainEditorWindow(); virtual void draw();

如上所述,我正试图让一个极其简单的FLTK 1.3.3应用程序正常工作。 但是,即使只有一个简单的Fl_窗口和一个Fl_按钮,似乎什么都不起作用。有人能帮忙吗

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\u按钮
。有人能告诉我为什么会发生这种情况吗?据我所知,我的代码应该没有什么特别的错误。

在您的
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\u Window::show()
来显示它


注意:在
main
中,不需要将
mw
作为指向
MainEditorWindow
的指针,您需要调用Fl\u Window::draw()

也许你希望按钮也可以点击

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

你不需要以某种方式将按钮添加到窗口中吗?@Hedanito在
begin()
之间创建小部件。我只能想象线程的危险:|@Hedanito我也担心——至少可以说FLTKs API已经过时了。他们有一个
add(Fl\u Widget*)
函数。@Calcys尝试更改按钮的(x,y)字词(Fl\u button
构造函数的前两个参数)。问题似乎在于
Fl\u窗口的子类化。我试着简单地创建一个
Fl\u窗口
,并添加一个按钮,效果很好。你能尝试创建一个
Fl\u窗口
的子类吗?我有一个我不久前制作的fltk应用程序,它使用了与我上述答案类似的代码结构,这很有效,但我可以稍后尝试另一个测试用例。嗯。。。使用
Fl\u Window::draw()调用基类
draw()
方法成功了,现在可以了。奇怪的
    int MainEditorWindow::handle(int _event)
    {
      //return 1;
      return(Fl_Window::handle(_event));
    }