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

Posted

技术标签:

【中文标题】如何绘制多个矩形 FLTK C++【英文标题】:How to draw multiple rectangles FLTK C++ 【发布时间】:2019-07-15 10:35:25 【问题描述】:

我正在尝试在 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。问题是我正在尝试在窗口上绘制多个矩形形状,并且创建多个装箱以便拥有多个矩形似乎非常乏味。我尝试查找很多关于在 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;

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

【问题讨论】:

【参考方案1】:

作为重要的附注:您应该真正考虑使用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-&gt;end() 或任何其他以相同方式工作的小部件(例如 Fl_Group)之间初始化的所有小部件都将成为周围元素的子元素并显示,如果显示了他们的父母。

我不完全确定,如果 Fl_Box 是您正在寻找的东西。我发现Erco's FLTK Cheat Page 非常有帮助。您可能会在那里找到解决问题的灵感和其他方法。

【讨论】:

哦,使用自定义循环的原因是,我正在创建一个没有主循环的动态库,将通过dl_open 使用。 那么除了Box之外还有其他方法可以绘制多个矩形吗? @SASSY_ROG 是的。在像this example 这样的自定义画布中,只有矩形而不是对角线。

以上是关于如何绘制多个矩形 FLTK C++的主要内容,如果未能解决你的问题,请参考以下文章

使用 FLTK 和 C++:制作一个在定义的框架内适合图像的函数

使用 FLTK 在 C++ 中绘制圆以及本书(PPP)与系统结果之间的一些奇怪之处

如何在 C++ 和 FLTK 中实现倒计时时钟?

FLTK C++ Fl_line 不画

如何将参数传递给 draw() 方法 - FLTK

如何修复“Programmin 原则和实践使用 C++”一书中的 FLTK 头文件?