Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Cynacyn
33 / 33 / 7
Регистрация: 02.05.2013
Сообщений: 109
#1

Страуструп FLTK newline в Out_box - C++

12.09.2013, 12:16. Просмотров 633. Ответов 8
Метки нет (Все метки)

Здравствуйте, вопрос довольно специфический, поэтому я думаю нет нужды приводить Страусроповские исходники.
Но на всякий случай я их спрятал под спойлер:

Кликните здесь для просмотра всего текста

Out_box
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    struct Out_box : Widget {
        Out_box(Point xy, int w, int h, const string& s)
            :Widget(xy,w,h,s,0) { }
        void put(int);
        void put(const string&);
 
        void attach(Window& win);
    };
//------------------------------------------------------------------------------
 
void Out_box::put(const string& s)
{
    reference_to<Fl_Output>(pw).value(s.c_str());
}
 
//------------------------------------------------------------------------------
 
void Out_box::attach(Window& win)
{
    pw = new Fl_Output(loc.x, loc.y, width, height, label.c_str());
    own = &win;
}
Widget
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    class Widget {
    // Widget is a handle to an Fl_widget - it is *not* an Fl_widget
    // We try to keep our interface classes at arm's length from FLTK
    public:
        Widget(Point xy, int w, int h, const string& s, Callback cb)
            : loc(xy), width(w), height(h), label(s), do_it(cb)
        {}
 
        virtual void move(int dx,int dy) { hide(); pw->position(loc.x+=dx, loc.y+=dy); show(); }
        virtual void hide() { pw->hide(); }
        virtual void show() { pw->show(); }
        virtual void attach(Window&) = 0;
 
        Point loc;
        int width;
        int height;
        string label;
        Callback do_it;
 
        virtual ~Widget() { }
 
    protected:
        Window* own;    // every Widget belongs to a Window
        Fl_Widget* pw;  // connection to the FLTK Widget
    private:
        Widget& operator=(const Widget&); // don't copy Widgets
        Widget(const Widget&);
    };
Window
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    class Window : public Fl_Window { 
    public:
        // let the system pick the location:
        Window(int w, int h, const string& title);
        // top left corner in xy
        Window(Point xy, int w, int h, const string& title);    
 
        virtual ~Window() { }
 
        int x_max() const { return w; }
        int y_max() const { return h; }
 
        void resize(int ww, int hh) { w=ww, h=hh; size(ww,hh); }
 
        void set_label(const string& s) { copy_label(s.c_str()); }
 
        void attach(Shape& s) { shapes.push_back(&s); }
        void attach(Widget&);
 
        void detach(Shape& s);     // remove s from shapes 
        void detach(Widget& w);    // remove w from window (deactivates callbacks)
 
        void put_on_top(Shape& p); // put p on top of other shapes
 
    protected:
        void draw();
 
    private:
        vector<Shape*> shapes;     // shapes attached to window
        int w,h;                   // window size
 
        void init();
    };



Вопрос такой. Как в объект Out_box вывести строки разделённые "\n"


C++
1
2
3
4
//....    
Out_box ob;    
//...    
ob.put("first line \n second line");

Вывод выглядит так:

first line ^J second line
А нужно так:

first line
second line
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2013, 12:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Страуструп FLTK newline в Out_box (C++):

Бьерн Страуструп. Инсталляция библиотеки FLTK
Всем доброго времени суток. Помогите пожалуйста решить проблему. Хочу сразу...

FLTK
Добрый день, подскажите начинающему, как мне установить (использовать)...

Не работает FLTK
Решил поюзать FLTK, установил (вроде бы), инклуды все видит. Набрал тривиальный...

Информация по FLTK
Привет. Вот решил научиться создавать GUI и установил библиотеку FLTK....

Email(1) Страуструп
Необходима помощь, занимаюсь по Страуструпу. Смотрите 4 операцию! Задание:...

Задача:Страуструп. 4.11.4
1.Напишите программу,которая печатает символы от 'a' до 'z' и цифры от '0' до...

8
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
12.09.2013, 12:26 #2
Цитата Сообщение от Cynacyn Посмотреть сообщение
Вывод выглядит так:
куда производится вывод и какой функцией
0
Cynacyn
33 / 33 / 7
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 12:43  [ТС] #3
Цитата Сообщение от Raali Посмотреть сообщение
куда производится вывод и какой функцией
вывод происходит в объект Out_box, методом put

C++
1
2
3
4
void Out_box::put(const string& s)
{
    reference_to<Fl_Output>(pw).value(s.c_str());
}
Определение
C++
1
int Fl_Output::value(char* str);
не могу найти

reference_to:
C++
1
2
3
4
5
6
7
8
9
    
    typedef void* Address;    // Address is a synonym for void*
    typedef void(*Callback)(Address, Address);    // FLTK's required function type for all callbacks
 
template<class W> W& reference_to(Address pw)
    // treat an address as a reference to a W
    {
        return *static_cast<W*>(pw);
    }
0
Миниатюры
Страуструп FLTK  newline в Out_box  
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
12.09.2013, 12:54 #4
а если так, то что выведет?
C++
1
ob.put("first line \x0D\x0A second line");
0
Cynacyn
33 / 33 / 7
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 12:57  [ТС] #5
Цитата Сообщение от Raali Посмотреть сообщение
а если так, то что выведет?
C++
1
ob.put("first line \x0D\x0A second line");
вот
first line ^M^J second line
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
12.09.2013, 12:59 #6
Цитата Сообщение от Cynacyn Посмотреть сообщение
first line ^M^J second line
может быть этот Widget вообще не поддерживает множественных строк?
1
Cynacyn
33 / 33 / 7
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 13:04  [ТС] #7
Цитата Сообщение от Raali Посмотреть сообщение
может быть этот Widget вообще не поддерживает множественных строк?
может быть.

инфу не получается нагуглить.
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
12.09.2013, 13:17 #8
Цитата Сообщение от Raali Посмотреть сообщение
может быть этот Widget вообще не поддерживает множественных строк?
В точку. Первая ссылка в гугле http://www.fltk.org/documentation.php/doc-1.1/Fl_Output.html
1
Cynacyn
33 / 33 / 7
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 13:27  [ТС] #9
Спасибо!

Кому интересно, нужно изменить определение Out_box:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <FL/Fl_Multiline_Output.H>
//...
void Out_box::put(const string& s)
{
    //reference_to<Fl_Output>(pw).value(s.c_str());
    reference_to<Fl_Multiline_Output>(pw).value(s.c_str());
}
 
//------------------------------------------------------------------------------
 
void Out_box::attach(Window& win)
{
    //pw = new Fl_Output(loc.x, loc.y, width, height, label.c_str());
    pw = new Fl_Multiline_Output(loc.x, loc.y, width, height, label.c_str());
    own = &win;
}
0
12.09.2013, 13:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 13:27
Привет! Вот еще темы с решениями:

Страуструп. задание
насколько я понял задание - есть класс class STC { unexpected_handler...

Страуструп и Графика
Начал читать Страуструпа. По настоянию автора подключил его заголовочные файлы...

Инсталляция библиотеки FLTK
Пытаюсь установить библиотеку fltk, так как написано в учебнике Страуструпа....

Инсталяция библиотеки FLTK
В книге чтобы инсталировать, открыть файл fltk.dsw, а в каталоге нет файлов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru