FLTK 绘图函数使用哪个来源?小工具还是 Window?

Which origin does FLTK draw function use ? Widget or Window?

我正在尝试创建自定义转速计小部件。当我自己测试时,一切看起来都很好。 但是当我尝试在父 window 的不同位置绘制它时,它似乎总是使用 window 的原点而不是小部件的原点绘制,无论我传递的 x 或 y 值是多少给构造函数。

调用构造函数后的 printf() 确认小部件“知道”预期的 x 和 y。

这是默认行为吗?我认为绘图函数使用小部件 0,0 而不是 window。我是否需要在绘图函数中显式调用 x() 和 y() 并应用转换来更正此问题?

看来你需要自己翻译出处。在 documentation 它说:

Making Your Own Boxtypes
...
The Drawing Function
The drawing function is passed the bounding box and background color for the widget.
A simple drawing function might fill a rectangle with the given color and then draw a black outline:

void xyz_draw(int x, int y, int w, int h, Fl_Color c) {
  fl_color(c);
  fl_rectf(x, y, w, h);
  fl_color(FL_BLACK);
  fl_rect(x, y, w, h);
}

你可以看到他们在 x, y 而不是 0, 0

(对于上下文,盒子只是一种特定类型的小部件)。

是的,没错。 FLTK 1.x 中的所有坐标都是相对于 window 的。子window创建自己的坐标space,即子window中的坐标是相对于子window,而不是主window.