如何使用 fltk 使点出现

How to make a point appear using fltk?

本文关键字:何使用 fltk      更新时间:2023-10-16

创建一个窗口并在其中绘制一些形状后,我意识到我不能提出一个观点,而只是把它出现在窗口上。我已经搜索了手册,但我无法从中做出任何贡献。我使用的是 fltk 1.3.0。我该怎么做?

Fltk 附带了一堆有用的示例项目。如果您查看line_style示例,您可以轻松地将其简化为如下所示的绘图点:

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/fl_draw.H>
class TestWindow : public Fl_Window {
    void draw()
    {
        fl_color(255, 0, 0);
        fl_begin_points();
        fl_point(50, 50);
        fl_point(51, 51);
        fl_end_points();
    }
public:
    TestWindow(int w, int h, const char *l = 0)
        : Fl_Window(w, h, l) {}
};
int main(int argc, char ** argv) {
    Fl_Window *window = new TestWindow(200, 200);
    window->end();
    window->show(argc, argv);
    return Fl::run();
}

但作为建议,将单个点直接绘制到窗口上很少是明智的做法。 在大多数情况下,绘制到图像/缓冲区然后显示它们是更好的选择。

编辑:

下面是将绘图代码放入 Main 函数的示例。

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/fl_draw.H>
class TestWindow : public Fl_Window {
    void draw() {}
public:
    TestWindow(int w, int h, const char *l = 0) : Fl_Window(w, h, l) {}
};
int main(int argc, char ** argv) {
    Fl_Window *window = new TestWindow(200, 200);
    window->end();
    window->show(argc, argv);
    window->make_current();
    fl_color(255, 0, 0);
    fl_begin_points();
    fl_point(50, 50);
    fl_point(51, 51);
    fl_end_points();
    return Fl::run();
}

您应该注意手册中make_current的免责声明

危险:增量更新很难调试和维护!

除了将其用于简单的练习之外,所有这些都不是好的做法。

基于之前对这个问题的回答,我在文档中找到了这个:

fl_begin_points(( 开始绘制点列表。 点通过 fl_vertex(( 添加到列表中

所以这是一些显示一些点的代码(我添加了更多来真正看到点(:

#include <FL/fl_draw.H>
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
class Drawing : public Fl_Window {
    void draw(){
        fl_begin_points();
        //adding cushion to points to be able to see them.
        //center at 10,10
        fl_vertex(9,9);
        fl_vertex(9,10);
        fl_vertex(9,11);
        fl_vertex(10,9);
        fl_vertex(10,10);
        fl_vertex(10,11);
        fl_vertex(11,9);
        fl_vertex(11,10);
        fl_vertex(11,11);
        fl_end_points();
        fl_color(FL_BLACK);
    }
    public:
     Drawing(int w, int h, const char *l = 0) : Fl_Window(w, h, l){}
};
int main(int argc, char **argv){
    Fl_Window *window = new Drawing(340,180);
    window->end();
    window->show(argc, argv);
    return Fl::run();
}