2015-02-10 6 views
0

Я сделал несколько уроков и могу получить некоторые вещи для печати, когда я нажимаю кнопку, но я не могу понять, как сохранить значение, вставленное во входной виджет, переменная для меня. Я новичок в C++ и FLTK, поэтому не уверен, есть ли простая вещь, например, сканер Java. Я предполагаю, что вы бы использовали что-то вроде var=input-value();, но я не знаю, как использовать его в обратных вызовах, поскольку они принимают только определенные параметры. Такие как:FLTK Получение значения от ввода при отпускании кнопки

Fl_Button *butts[2]; 

    static void Button_cb(Fl_Widget * w, void* data){ 

    Fl_Button *b = (Fl_Button*)w; 
    fprintf(stderr, "Button '%s' was %s\n", b->label(), b->value() ? "Pushed" : "Released"); 

} 

Я не могу просто заменить линию печати, чтобы она работала. Ни одно из учебников, которые я нашел и не объяснил, объяснил это.

+0

Я попытался добавить нужный код к моему коммутатору. Он компилируется, но когда я нажимаю кнопку, метка Button не отображается в поле вывода. В случае FL_RELEASE: я добавил значение s-> (b-> label()); – user4342836

ответ

1

Вы думаете о слишком низком уровне. Просто используйте его на несколько более высоком уровне: обратный вызов - это конец операции нажатия: не нажатие или снятие.

#include <FL/Fl.H> 
#include <FL/Fl_Window.H> 
#include <FL/Fl_Input.H> 
#include <FL/Fl_Int_Input.H> 
#include <FL/Fl_Button.H> 
#include <FL/Fl_Color_Chooser.H> 

struct Info 
{ 
    // The widgets 
    Fl_Input* instr; 
    Fl_Int_Input* inint; 

    // Saved values 
    char sval[40]; 
    int ival; 
}; 

// Callback for the done button 
void done_cb(Fl_Widget* w, void* param) 
{ 
    Info* input = reinterpret_cast<Info*>(param); 

    // Get the values from the widgets 
    strcpy (input->sval, input->instr->value()); 
    input->ival = atoi(input->inint->value()); 

    // Print the values 
    printf("String value is %s\n", input->sval); 
    printf("Integer value is %d\n", input->ival); 
} 

int main(int argc, char **argv) 
{ 
    Info input; 

    // Setup the colours 
    Fl::args(argc, argv); 
    Fl::get_system_colors(); 

    // Create the window 
    Fl_Window *window = new Fl_Window(200, 150); 
    int x = 50, y = 10, w = 100, h = 30; 
    input.instr = new Fl_Input(x, y, w, h, "Str"); 
    input.instr->tooltip("String input"); 

    y += 35; 
    input.inint = new Fl_Int_Input(x, y, w, h, "Int"); 
    input.inint->tooltip("Integer input"); 

    y += 35; 
    Fl_Button* done = new Fl_Button(x, y, 100, h, "Done"); 
    done->callback(done_cb, &input); 
    window->end(); 

    window->show(argc, argv); 
    return Fl::run(); 
} 
+0

Ahhh. Благодаря тонну! – user4342836

+0

Один быстрый вопрос. Как получить значение ival в главном, чтобы делать что-либо с любым пользователем? Поэтому скажите, что они входят в 5, и я хочу умножить его на покупку 10. Я не могу сделать input.ival-> value(); Он говорит, что ввод должен быть типом указателя. – user4342836

+0

Получите его из информационной структуры (называемой вводом в примере). Посмотрите на тестовые программы, которые поставляются с дистрибутивом для большего количества примеров. Обратите внимание, что многие из них генерируются жидкостью и имеют тенденцию иметь одну буквенную переменную. – cup