4.4画控件
优质
小牛编辑
132浏览
2023-12-01
当FLTK需要重画控件时将调用虚拟函数draw().只有在damage()返回非0值时调用该函数,draw()返回后,damage()被清0。Draw()应该被声明为保护成员函数,避免在不需要写画图代码时用到。
Damage()将包含从最后一次调用draw()后damage(n)调用产生的所有与或位信息,根据该信息只重画需要重画的位置,只有FLTK认为需要全部重画时才打开FL_DAMAGE_ALL位,比如收到expose事件。
修改控件的尺寸
resize(int x,int y,int w,int h)在控件被移动和改变大小时被调用,这些参数分别是新位置,宽度和高度。但是x(),y(),w(),h(),还是以前的值,若要改变这些值,必须在基类中也调用resize()函数
不需要调用redraw()函数,至少只改变x(),y()时不需要,因为一个组合控件有一套更有效的方法来画新的位置
如何制作一个组合控件
一个组合控件包括一个或多个子控件。制作组合控件必须继承Fl_Group类.不继承Fl_Group类当然也可能可以制作一个组合控件,但是你还是要重新写Fl_Group类里面的工作
子控件可能在类里面声明
class MyClass : public Fl_Group
{
Fl_Button the_button;
Fl_Slider the_slider;
...
};
构造函数要初始化这些子控件。他们将被自动的add()到group中。因为Fl_Group构造函数调用了begin().在构造函数中不要忘记调用end()函数
MyClass::MyClass(int x, int y, int w, int h) :
Fl_Group(x, y, w, h),
the_button(x + 5, y + 5, 100, 20),
the_slider(x, y + 50, w, 20)
{
...(you could add dynamically created child widgets here)...
end(); // don't forget to do this!
}