#include #include #include #include #include #include using namespace std; class VentanaSumador : public Fl_Window { public: VentanaSumador(int x, int y, int w, int h, char *title); private: Fl_Value_Input *viSumando1, *viSumando2; Fl_Value_Output *voResultado; Fl_Button *btSalir; private: static void salir_cb(Fl_Widget *w, void *datos=NULL); static void sumar_cb(Fl_Widget *w, void *datos=NULL); }; VentanaSumador::VentanaSumador(int x, int y, int w, int h, char *title) : Fl_Window(x,y,w,h,title) { begin(); // opcional viSumando1 = new Fl_Value_Input(90,10,100,35,"sumando 1"); viSumando2 = new Fl_Value_Input(90,60,100,35,"sumando 2"); voResultado = new Fl_Value_Output(90,110,100,35,"resultado"); btSalir = new Fl_Button(50,160,80,35,"&Terminar"); end(); // MUY importante no olvidarlo viSumando1->callback(sumar_cb); viSumando2->callback(sumar_cb); btSalir->callback(salir_cb); } void VentanaSumador::salir_cb(Fl_Widget *w, void *datos) { VentanaSumador *v = (VentanaSumador *) w->parent(); v->hide(); } void VentanaSumador::sumar_cb(Fl_Widget *w, void *datos) { VentanaSumador *v = (VentanaSumador *) w->parent(); float suma = v->viSumando1->value() + v->viSumando2->value(); v->voResultado->value(suma); } int main() { VentanaSumador v1(10,10,200,200,"Sumador"); v1.show(); return Fl::run(); } /* Cositas a comentar/probar: - qué pasa si no se hace v1.show() - qué pasa si no se llama a Fl::run() - se puede tener más de una ventana - qué ocurre si tenemos sólo el callback de un sumando - cómo sumar cuando se salga del control (no siempre que cambie) - ¿tiene sentido crear un objeto VentanaSumador pasándole x,y,w,h? - un botón adicional para poner sumandos a 0 - ... */