Fl_Window 子类不起作用
Fl_Window subclass doesn't work
如上文所述,我正在尝试让一个极其简单的 FLTK 1.3.3 应用程序运行。
但是,即使只有一个简单的 Fl_Window 和 1 Fl_Button,似乎也没有任何效果。有人可以帮忙吗?
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();
}
window 显示正常,其大小可移动等,draw()
- 正在调用函数等等。但是 window 本身只是 空白。 它什么也没有显示,尤其是 Fl_Button
。谁能告诉我为什么会这样?据我所知,我的代码应该没有什么特别的错误。
在你的 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()
来显示它。
请注意,无需使 mw
指向 main
中的 MainEditorWindow
。
您需要调用 Fl_Window::draw()
void MainEditorWindow::draw()
{
m_btnExit->redraw();
Fl_Window::draw();
}
也许您希望按钮也可以点击
int MainEditorWindow::handle(int _event)
{
//return 1;
return(Fl_Window::handle(_event));
}
如上文所述,我正在尝试让一个极其简单的 FLTK 1.3.3 应用程序运行。 但是,即使只有一个简单的 Fl_Window 和 1 Fl_Button,似乎也没有任何效果。有人可以帮忙吗?
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();
}
window 显示正常,其大小可移动等,draw()
- 正在调用函数等等。但是 window 本身只是 空白。 它什么也没有显示,尤其是 Fl_Button
。谁能告诉我为什么会这样?据我所知,我的代码应该没有什么特别的错误。
在你的 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()
来显示它。
请注意,无需使 mw
指向 main
中的 MainEditorWindow
。
您需要调用 Fl_Window::draw()
void MainEditorWindow::draw()
{
m_btnExit->redraw();
Fl_Window::draw();
}
也许您希望按钮也可以点击
int MainEditorWindow::handle(int _event)
{
//return 1;
return(Fl_Window::handle(_event));
}