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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Как сделать такой вывод? - C++

14.11.2011, 08:11. Просмотров 1359. Ответов 36
Метки нет (Все метки)

Предположим, у меня есть
C++
1
2
3
4
5
6
7
8
9
10
11
class TLadle
{
public:
    double Radius;
    double Height;
};
class TModel
{
public:
    TLadle Ladle;
};
и я хочу вывести так:
Model={
Model={Ladle={
Model={Ladle={Radius=3.4,
Model={Ladle={Height=4.2,
Model={Ladle=}
Model=}
. К белому тексту не приглядывайтесь, считайте, что его нет, я просто и на форуме не смог придумать лучшего способа сравнять текст. Как это сделать? Только через GDI.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2011, 08:11     Как сделать такой вывод?
Посмотрите здесь:

Как сделать вывод в таблице? - C++
c++ как сделать вывод в таблице. Чтобы вывод выводился не 1 раз, а много раз и окно не закрывалось.

Как сделать вывод в консоль - C++
count << "GOLD MEMBER из голландии парень крутой,Голд Мембер Член Золотой";

Вывод через структуры ,как сделать? - C++
#include <iostream> #include <math.h> using namespace std; class drob { public: double ch;

С++. Вывод данных с USB. Как сделать? - C++
Здравствуйте. Мне нужно с мк через RS-485 , который подключается к компу через USB вывести данные. там несколько байт информации. Ничего...

Как сделать вывод всех элементов 2-3 дерева? - C++
Использовал реализацию 2-3 дерева с Хабра. Но вообще не могу разобраться, не знаю как сделать вывод всех элементов, хотя бы как список,...

Как сделать ровный вывод состояния регистров - C++
Всем исключительно доброго времени дня или ночи. Я начинающий, так что прошу сильно меня не пинать. В общем, вот в чём дело: По...

Как сделать вывод чисел в виде квадрата? - C++
#include <iostream> #include <cmath> using namespace std; int main() { float Fx = 4, Fy = 5; int x, y, m; cin...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 17:03  [ТС]     Как сделать такой вывод? #16
Цитата Сообщение от sandye51 Посмотреть сообщение
Или ты их не различаешь?
Если он даже инициализацию от вывода не отличает, то массив от класса подавно не отличит, а структуру от charа.
Jupiter
14.11.2011, 17:04
  #17

Не по теме:

Цитата Сообщение от sandye51 Посмотреть сообщение
Jupiter, для структур была, а для классов нет.
цитата из стандарта 2003-го
12.6.1 Explicit initialization
For another example,
class X {
public:
int i;
float f;
complex c;
} x = { 99, 88.8, 77.7 };
Here, x.i is initialized with 99, x.f is initialized with 88.8, and complex::complex(double) is
called for the initialization of x.c. ] [Note: braces can be elided in the initializer-list for any aggregate,
even if the aggregate has members of a class type with user-defined type conversions; see 8.5.1. ]

taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 17:06  [ТС]     Как сделать такой вывод? #18
Цитата Сообщение от Xind Посмотреть сообщение
Создайте метод в классе TModel, который будет производит вывод. В нем выведите строку "Model={". Затем на след. "\tLadle={" и "\t\tRadius=" << Ladle.tRadius << endl;
"\t\Height=" << Ladle.Height<< endl;
и строки "\t\t}" "\t}"
Какой нафиг << endl;? Ты гуй от консоли вообще отличаешь?
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
14.11.2011, 17:06     Как сделать такой вывод? #19
taras atavin, или функцией TextOut() из GDI там же http://zetcode.com/tutorials/winapi/gdi/
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.11.2011, 17:06     Как сделать такой вывод? #20
Цитата Сообщение от taras atavin Посмотреть сообщение
я хочу вывести
Цитата Сообщение от taras atavin Посмотреть сообщение
Как это сделать? Только через GDI.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <vector>
#include <sstream>
 
#include <windows.h>
 
#define WINWIDTH  640
#define WINHEIGHT 480
 
struct point_t
{
    double x, y;
};
 
struct rect_t
{
    int id;
    point_t tl, br;
};
 
std::vector<rect_t> rect_v;
void paint_rect_v( HDC hdc ); /* интересная часть тут */
 
HINSTANCE hInst;
 
LRESULT CALLBACK WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
 
int WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR lpszCmdLine, int nCmdShow )
{
    hInst = hInstance;
 
    rect_v.push_back( { 0, { 15.5, 16.6 }, { 16.6, 17.8 } } );
    rect_v.push_back( { 1, { 1.0, 4.0 }, { 8.0, 5.0 } } );
 
    WNDCLASSEX wc =
    {
        sizeof(WNDCLASSEX),
        0, /*CS_* */
        WinProc,
        0, 0,
        hInstance,
        LoadIcon(0, IDI_APPLICATION),
        LoadCursor(0, IDC_ARROW),
        GetSysColorBrush(COLOR_BTNFACE),
        0,
        "main_win_class",
        LoadIcon(0, IDI_APPLICATION)
    };
 
    if( !RegisterClassEx(&wc) ) return 1;
 
    HWND hMainWnd = CreateWindowEx(WS_EX_APPWINDOW  /*WS_EX_* */ , "main_win_class", "window", WS_SYSMENU | WS_MINIMIZEBOX,
                                  GetSystemMetrics(SM_CXSCREEN)/2 - WINWIDTH/2,
                                  GetSystemMetrics(SM_CYSCREEN)/2 - WINHEIGHT/2,
                                  WINWIDTH,
                                  WINHEIGHT,
                                  0, 0, hInstance, 0);
 
    if(!hMainWnd) return 1;
 
    ShowWindow( hMainWnd, nCmdShow );
    UpdateWindow( hMainWnd );
 
    MSG msg;
 
    while(GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
 
LRESULT CALLBACK WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    HDC hdc;
    PAINTSTRUCT ps;
 
    switch( msg )
    {
        case WM_DESTROY:
           PostQuitMessage( 0 );
           break;
 
        case WM_PAINT:
           hdc = BeginPaint( hWnd, &ps );
           paint_rect_v( hdc );
           EndPaint( hWnd, &ps );
           break;
 
        default:
             return DefWindowProc(hWnd, msg, wParam, lParam);
    }
 
    return 0;
}
 
/* интересная часть */
void paint_rect_v( HDC hDc )
{
    RECT rc;
    rc.top = 5;
    rc.left = 5;
 
    SetTextColor( hDc, 0 );
    SetBkMode( hDc, TRANSPARENT );
 
    for( size_t i = 0; i < rect_v.size(); i++ )
    {
        std::ostringstream text( std::ostringstream::out );
 
        text << "rect_v[" << i << "] = {\n    id = " << rect_v[i].id << ";\n"
             "    tl = {\n        x = " << rect_v[i].tl.x << "\n        y = " << rect_v[i].tl.y << "\n    };\n"
             "    br = {\n        x = " << rect_v[i].br.x << "\n        y = " << rect_v[i].br.y << "\n    };\n"
             "};\n";
 
        rc.top += DrawText( hDc, text.str().c_str(), -1, &rc, DT_NOCLIP );
    }
 
}
оно?
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
14.11.2011, 17:06     Как сделать такой вывод? #21
Цитата Сообщение от taras atavin Посмотреть сообщение
Какой нафиг << endl;? Ты гуй от консоли вообще отличаешь?
Я же написал:
Цитата Сообщение от Xind Посмотреть сообщение
только Вам нужно воспользоваться функцией SetWindowText() здесь есть примеры
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 17:06  [ТС]     Как сделать такой вывод? #22
Цитата Сообщение от Xind Посмотреть сообщение
SetWindowText()
И как она мне текст сравняет? Она ващето для заголовков окон предназначена.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
14.11.2011, 17:08     Как сделать такой вывод? #23
Цитата Сообщение от taras atavin Посмотреть сообщение
И как она мне текст сравняет? Она ващето для заголовков окон предназначена.
Господи.
Посмотрите пример talis который он дал
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 17:08  [ТС]     Как сделать такой вывод? #24
Цитата Сообщение от Xind Посмотреть сообщение
Я же написал:
Сообщение от Xind
только Вам нужно воспользоваться функцией SetWindowText()
Поток к гую она тем более не прикрутит.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.11.2011, 17:10     Как сделать такой вывод? #25
taras atavin, прикрутит. Посмотрите мой пример.
sandye51
14.11.2011, 17:12
  #26

Не по теме:

Jupiter, а теперь мой пример посмотри
и засунь его в свой компилятор, работает?) в моем нет, а на онлайне - да

taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 18:00  [ТС]     Как сделать такой вывод? #27
Цитата Сообщение от Xind Посмотреть сообщение
TextOut()
Ну она то мне известна, только как для неё правильно обработать x? Мне же надо, чтоб вторая строчка начиналась правее, а последняя - перед скобкой первой строки. Есть какая нибудь функция измерения экранной ширины текста?

Добавлено через 6 минут
Цитата Сообщение от Xind Посмотреть сообщение
Посмотрите пример talis который он дал
Неравномерный шрифт + выравнивание пробелами. Я даже в офисе заставил бы студента такой текст переделывать и ставить табуляции/границы абзацев.
talis
14.11.2011, 18:08
  #28

Не по теме:

taras atavin, ну так поставьте всё, что вам нужно - шрифт, выравнивание какое там хотите.

taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 18:57  [ТС]     Как сделать такой вывод? #29
Почти сделал, не хватает числовых значений размеров:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
class TLength
{
public:
    double Value;
    void Output(HDC Context, int &x, int &y, char *Name);
};
class TLadle
{
public:
    TLength Radius;
    TLength Height;
    void Output(HDC Context, int &x, int &y, char *Name);
};
class TModel
{
public:
    TLadle Ladle;
    void Output(HDC Context, int &x, int &y, char *Name);
};
void TModel::Output(HDC Context, int &x, int &y, char *Name)
{
 char *p;
 SIZE  Size; 
 int   h;
 int   XBuffer;
 GetTextExtentPoint32( Context,
                       "Q"    ,
                       1      ,
                      &Size   );
 h=Size.cy;
 for (p=Name; *p!=0; ++p)
 {
  TextOut(Context,
          x      ,
          y      ,
          p      ,
          1      );
  GetTextExtentPoint32( Context,
                       p      ,
                       1      ,
                      &Size   );
  x+=Size.cx;  
 }
 TextOut(Context, x, y, "={", 2);
 GetTextExtentPoint32( Context,
                       "={"    ,
                       2      ,
                      &Size   ); 
 x+=Size.cx; 
 y+=h;
 XBuffer=x;
 Ladle.Output(Context,
              x      ,
              y      ,
              "Ladle");
 GetTextExtentPoint32( Context,
                       "{"    ,
                       1      ,
                      &Size   );
 x=XBuffer;
 x-=Size.cx;
 TextOut(Context, x, y, "}", 1);
 y+=Size.cy;
}
void TLadle::Output(HDC Context, int &x, int &y, char *Name)
{
 char *p;
 SIZE  Size; 
 int   h;
 int   XBuffer;
 GetTextExtentPoint32( Context,
                       "Q"    ,
                       1      ,
                      &Size   );
 h=Size.cy;
 for (p=Name; *p!=0; ++p)
 {
  TextOut(Context,
          x      ,
          y      ,
          p      ,
          1      );
  GetTextExtentPoint32( Context,
                       p      ,
                       1      ,
                      &Size   );
  x+=Size.cx;  
 }
 TextOut(Context, x, y, "={", 2);
 GetTextExtentPoint32( Context,
                       "={"    ,
                       2      ,
                      &Size   ); 
 x+=Size.cx; 
 y+=h;
 XBuffer=x;
 Radius.Output(Context ,
               x       ,
               y       ,
               "Radius");
 y-=h;
 TextOut(Context,
         x      ,
         y      ,
         ","    ,
         1      ); 
 GetTextExtentPoint32( Context,
                       ","    ,
                       1      ,
                      &Size   );
 y+=h;
 x=XBuffer;
 Height.Output(Context ,
               x       ,
               y       ,
               "Height");
 GetTextExtentPoint32( Context,
                       "{"    ,
                       1      ,
                      &Size   );
 x=XBuffer;
 x-=Size.cx;
 TextOut(Context, x, y, "}", 1);
 y+=Size.cy;
}
void TLength::Output(HDC Context, int &x, int &y, char *Name)
{
 char *p;
 SIZE  Size; 
 int   h;
 GetTextExtentPoint32( Context,
                       "Q"    ,
                       1      ,
                      &Size   );
 h=Size.cy;
 for (p=Name; *p!=0; ++p)
 {
  TextOut(Context,
          x      ,
          y      ,
          p      ,
          1      );
  GetTextExtentPoint32( Context,
                       p      ,
                       1      ,
                      &Size   );
  x+=Size.cx;  
 }
 TextOut(Context,
         x      ,
         y      ,
         "="    ,
         1      );
 GetTextExtentPoint32( Context,
                      "="     ,
                      1      ,
                     &Size   );
 x+=Size.cx; 
 y+=h;
}
,
Миниатюры
Как сделать такой вывод?  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2011, 18:58     Как сделать такой вывод?
Еще ссылки по теме:

Как сделать вывод суммы каждого столбца? - C++
const int N = 10; int A; int B; void VivodMass(int M, int N) { for (int i = 0; i&lt;N; i++) { for (int j = 0; j&lt;N; j++) ...

Как сделать вывод средне арифмет по каждому столбцу - C++
Как сделать что бы считал сред арифмет каждого столбца или строки при нажатии на чекбокс Форма вот такая Код на создании матрицы Вот...

Список: как сделать вывод не в обратном порядке а в прямом - C++
Здравствуйте пытаюсь реализовать список, но не понимаю как сделать вывод не в обратном порядке а в прямом?думала что достаточно print2().но...

Как сделать вывод массива указателей char на экран? - C++
Доброго времени суток. Делал наброски на телефонный справочник с несколькими телефонными книгами внутри. При написании пользуюсь тем,...

Как сделать вывод сумм времени в секундах и миллисекундах? - C++
помогите скажите как сделать вывод сумм времени в секундах и милисекундах#include &lt;iostream&gt; #include &quot;time.h&quot; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 18:58  [ТС]     Как сделать такой вывод? #30
Как вывести double?
Yandex
Объявления
14.11.2011, 18:58     Как сделать такой вывод?
Ответ Создать тему
Опции темы

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