button.C

#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.

[Next example]
[back to contents]