#include <stdlib.h> #include <stdio.h> #include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Button.H> void beepcb(Fl_Widget *, void *) { printf("\007"); fflush(stdout); } void exitcb(Fl_Widget *, void *) { exit(0); } int main(int argc, char ** argv) { Fl_Window *window = new Fl_Window(320,65); window->begin(); Fl_Button *b1 = new Fl_Button(20, 20, 80, 25, "Beep"); b1->callback(beepcb,0); Fl_Button *b2 = new Fl_Button(120,20, 80, 25, "no op"); Fl_Button *b3 = new Fl_Button(220,20, 80, 25, "Exit"); b3->callback(exitcb,0); window->end(); window->show(argc,argv); return Fl::run(); }
In this example we make some button widgets and make them do something through callbacks.
All widgets have a single callback() function. It is called in response to an event on that widget, exactly which event depends on the type of widget. The function takes two arguments: a pointer to the widget (you will usually need to cast this to the correct subclass) and a void* pointer to a piece of arbitrary user_data.
You don't have to give all the widgets a callback, as the "no op" b2 widget demonstrates. What these do is described in the next program.