问题描述
我是fltk的新手,并且回调函数有问题。 我有一个创建主窗口的类(Win),该类包含一个在窗口内创建组的class(Group)的元素。 因此,当我单击Gr组中包含的应用程序中的按钮时,应该每次都调用相同的回调函数。但是,这仅适用于第一个实例,不适用于随后的实例。是什么原因造成的,我该如何解决?
class Win {
public:
Win();
Fl_Window* make_window();
private:
Fl_Window* window;
GrouP* group1;
GrouP* group2;
};
class Group : public Fl_Group {
public:
Group(Win*,char* l,int value);
private:
Fl_GrouP* initialize(Win*);
static void changeLabel(Fl_Widget*,void*); //callback function
void changelabel();
char* name;
Fl_GrouP* mainGroup;
Fl_Button* open;
Fl_GrouP* group;
};
和.cpp
Fl_Window* Win::make_window()
{
window = new Fl_Window(0,1200,780);
window->begin();
{
group1 = new Group(this,"group1",count++);
yPos += 200;
g = new Group(this,"mod2",countm++);
}
}
window->end();
window->show();
return window;
}
Group::Group(Win* window,int value)
: Fl_Group(window->getX(),window->getY(),window->getW(),200),mainGroup(),name(l)
{
initialize(window);
}
Fl_GrouP* Group::initialize(Win* window) {
mainGroup = new Fl_Group(window->x(),window->y(),window->w(),200); {
open = new Fl_Button(m_name->x() + 80,mainGroup->y(),30,name->h(),"open");
open->callback(Group::changeLabel,this);
group= new Fl_Group(open->x(),open->y() + 35,mainGroup->h() -100);
group->hide();
}
mainGroup->end();
return mainGroup;
}
void Group::changeLabel(Fl_Widget* w,void* group)
{
reinterpret_cast<GrouP*>(group)->changelabel();
}
void Group::changelabel()
{
if(open->label() == "open") open->label("close"); group->Show();
else if(open->label() == "close") open->label("open");
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)