Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 12:16     Страуструп FLTK newline в Out_box #1
Здравствуйте, вопрос довольно специфический, поэтому я думаю нет нужды приводить Страусроповские исходники.
Но на всякий случай я их спрятал под спойлер:

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

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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2013, 12:16     Страуструп FLTK newline в Out_box
Посмотрите здесь:

C++ Страуструп
C++ Страуструп
C++ FLTK
C++ Не работает FLTK
C++ Инсталяция библиотеки FLTK
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
12.09.2013, 12:26     Страуструп FLTK newline в Out_box #2
Цитата Сообщение от Cynacyn Посмотреть сообщение
Вывод выглядит так:
куда производится вывод и какой функцией
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 12:43  [ТС]     Страуструп FLTK newline в Out_box #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);
    }
Миниатюры
Страуструп FLTK  newline в Out_box  
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
12.09.2013, 12:54     Страуструп FLTK newline в Out_box #4
а если так, то что выведет?
C++
1
ob.put("first line \x0D\x0A second line");
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 12:57  [ТС]     Страуструп FLTK newline в Out_box #5
Цитата Сообщение от Raali Посмотреть сообщение
а если так, то что выведет?
C++
1
ob.put("first line \x0D\x0A second line");
вот
first line ^M^J second line
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
12.09.2013, 12:59     Страуструп FLTK newline в Out_box #6
Цитата Сообщение от Cynacyn Посмотреть сообщение
first line ^M^J second line
может быть этот Widget вообще не поддерживает множественных строк?
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 13:04  [ТС]     Страуструп FLTK newline в Out_box #7
Цитата Сообщение от Raali Посмотреть сообщение
может быть этот Widget вообще не поддерживает множественных строк?
может быть.

инфу не получается нагуглить.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
12.09.2013, 13:17     Страуструп FLTK newline в Out_box #8
Цитата Сообщение от Raali Посмотреть сообщение
может быть этот Widget вообще не поддерживает множественных строк?
В точку. Первая ссылка в гугле http://www.fltk.org/documentation.ph...Fl_Output.html
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 13:27     Страуструп FLTK newline в Out_box
Еще ссылки по теме:

C++ vs2010+fltk+lnk2019
C++ Инсталляция библиотеки FLTK
Бьерн Страуструп. Инсталляция библиотеки FLTK C++

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

Или воспользуйтесь поиском по форуму:
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
12.09.2013, 13:27  [ТС]     Страуструп FLTK newline в Out_box #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;
}
Yandex
Объявления
12.09.2013, 13:27     Страуструп FLTK newline в Out_box
Ответ Создать тему
Опции темы

Текущее время: 22:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru