如何绘制多个矩形 FLTK C++

How to draw multiple rectangles FLTK C++

我正在尝试在 fltk 中创建一个程序,并且我遵循了这个示例

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>

int main(int argc, char **argv) {
  Fl_Window *window = new Fl_Window(340,180);
  Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");
  box->box(FL_UP_BOX);
  box->labelfont(FL_BOLD+FL_ITALIC);
  box->labelsize(36);
  box->labeltype(FL_SHADOW_LABEL);
  window->end();
  window->show(argc, argv);
  return Fl::run();
}

来自 FLTK docs。问题是我正在尝试将多个矩形形状绘制到 window 并且创建多个盒装以具有多个矩形似乎非常乏味。我试着在 FLTK 上查找了很多关于绘制形状的教程,但我找不到任何足够简单的东西来展示给我看。

到目前为止我的代码看起来像这样

#include <FL/Fl.H>
#include <FL/Fl_Widget.H>
#include <FL/Fl_Window.H>
// #include <FL/fl_draw.H>
#include <iostream>

int main() {
    Fl_Window *window = new Fl_Window(900, 600);
    window->position(0, 0);
    window->color(FL_BLACK);
    window->end();
    window->show();
    while (1) {
        int ev = Fl::event();
        if (ev == FL_SHORTCUT) {
            if (Fl::event_key() == FL_Escape)
                break;
        }
        Fl::check();
    }
    return 0;
}

并且我想在循环内(连续)实现绘图。

作为一个重要的旁注:你真的应该考虑使用 Fl::run() 而不是你的自定义 while 循环,我 运行 使用与你类似的方法解决了许多问题。

现在,回答你的问题:

举个例子,将 Box 创建包装在一个循环中。你可以拿一个索引来给每个Box分配不同的位置。

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>

int main(int argc, char **argv) {
   Fl_Window *window = new Fl_Window(340,500);

   // 3 Fl_Boxes in a loop
   for (int i = 0; i < 3; ++i) {
       Fl_Box *box = new Fl_Box(20, 40 + i*120, 300, 100,"Hello, World!");
       box->box(FL_UP_BOX);
       box->labelfont(FL_BOLD+FL_ITALIC);
       box->labelsize(36);
       box->labeltype(FL_SHADOW_LABEL);
   }
   window->end();
   window->show(argc, argv);
   return Fl::run();
}

您可以在方框构造函数中使用公式 20, 40 + i*120, 300, 100 来控制布局。您必须根据您的要求进行调整。

使用 FLTK 的一个基本规则是:在 window 构造函数和 window->end() 之间初始化的所有小部件或以相同方式工作的任何其他小部件,例如 Fl_Group,将成为周围元素的子元素,如果显示其父元素,则将显示。

我不完全确定 Fl_Box 是否是您要查找的内容。我发现 Erco's FLTK Cheat Page 非常有帮助。您可能会在那里找到解决问题的灵感和其他方法。