问题描述
我正在尝试创建自定义 rpm 仪表小部件。当我自己测试时,一切看起来都很好。 但是当我尝试在父窗口中的不同位置绘制它时,无论我传递给构造函数的 x 或 y 值是什么,它似乎总是使用窗口的原点而不是小部件的原点进行绘制。
调用构造函数后的 printf() 确认小部件“知道”预期的 x 和 y。
这是默认行为吗?我认为绘图功能使用小部件 0,0 而不是窗口。我是否需要在 draw 函数中显式调用 x() 和 y() 并应用转换来纠正这个问题?
解决方法
在我看来,您需要自己翻译原文。在 documentation 中它说:
制作自己的盒子类型
...
绘图功能
绘图函数传递小部件的边界框和背景颜色。
一个简单的绘图函数可能会用给定的颜色填充一个矩形,然后绘制一个黑色的轮廓:
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,h);
}
并且您可以看到他们在 x,y
而非 0,0
处绘制方框。
(就上下文而言,框只是一种特定类型的小部件)。