Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433

Почему нельзя так делать? Конструктор перемещения?

17.07.2019, 13:37. Показов 4135. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня возникла проблема с хранением объектов класса в векторе векторов, объявленном в другом классе. Класс, объекты которого пытаюсь хранить в векторе, генерируется автоматически мастером MFC, но суть не в этом.
Вот этот класс.
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
// NOTE: This class must remain a binary-compatible subset
// of CEditView. Do not add data members or virtual functions
// directly to this class.
class CEdit : public CWnd
{
    // DECLARE_DYNAMIC virtual OK - CWnd already has DECLARE_DYNAMIC
    DECLARE_DYNAMIC(CEdit)
 
// Constructors
public:
    CEdit();
    BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
 
// Attributes
    BOOL CanUndo() const;
    int GetLineCount() const;
    BOOL GetModify() const;
    void SetModify(BOOL bModified = TRUE);
    void GetRect(LPRECT lpRect) const;
    DWORD GetSel() const;
    void GetSel(int& nStartChar, int& nEndChar) const;
    HLOCAL GetHandle() const;
    void SetHandle(HLOCAL hBuffer);
    void SetMargins(UINT nLeft, UINT nRight);
    DWORD GetMargins() const;
    void SetLimitText(UINT nMax);
    UINT GetLimitText() const;
    CPoint PosFromChar(UINT nChar) const;
    int CharFromPos(CPoint pt) const;
 
    // NOTE: first word in lpszBuffer must contain the size of the buffer!
    // NOTE: may not return null character
    int GetLine(_In_ int nIndex, _Out_ LPTSTR lpszBuffer) const;
    // NOTE: may not return null character
    int GetLine(_In_ int nIndex, _Out_writes_to_(nMaxLength, return) LPTSTR lpszBuffer, _In_ int nMaxLength) const;
 
    AFX_ANSI_DEPRECATED BOOL SetCueBanner(_In_z_ LPCWSTR lpszText, _In_ BOOL fDrawIfFocused = FALSE);
    AFX_ANSI_DEPRECATED BOOL GetCueBanner(_Out_writes_z_(cchText) LPWSTR lpszText, _In_ int cchText) const;
 
#if defined(UNICODE)
    CString GetCueBanner() const;
 
    BOOL ShowBalloonTip(_In_z_ LPCWSTR lpszTitle, _In_z_ LPCWSTR lpszText, _In_ INT ttiIcon = TTI_NONE);
    BOOL ShowBalloonTip(_In_ PEDITBALLOONTIP pEditBalloonTip);
    BOOL HideBalloonTip();
#endif  // (UNICODE)
 
#if defined(UNICODE)
    // REVIEW: Sets the characters in the edit control that are highlighted.
    void SetHighlight(_In_ int ichStart, _In_ int ichEnd);
 
    // REVIEW: Retrieves the characters in the edit control that are highlighted.
    BOOL GetHighlight(_Out_ int* pichStart, _Out_ int* pichEnd) const;
#endif  // defined(UNICODE)
 
// Operations
    void EmptyUndoBuffer();
    BOOL FmtLines(BOOL bAddEOL);
 
    void LimitText(int nChars = 0);
    int LineFromChar(int nIndex = -1) const;
    int LineIndex(int nLine = -1) const;
    int LineLength(int nLine = -1) const;
    void LineScroll(int nLines, int nChars = 0);
    void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE);
    void SetPasswordChar(TCHAR ch);
    void SetRect(LPCRECT lpRect);
    void SetRectNP(LPCRECT lpRect);
    void SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE);
    void SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = FALSE);
    BOOL SetTabStops(int nTabStops, LPINT rgTabStops);
    void SetTabStops();
    BOOL SetTabStops(const int& cxEachStop);    // takes an 'int'
 
    // Clipboard operations
    BOOL Undo();
    void Clear();
    void Copy();
    void Cut();
    void Paste();
 
    BOOL SetReadOnly(BOOL bReadOnly = TRUE);
    int GetFirstVisibleLine() const;
    TCHAR GetPasswordChar() const;
 
// Implementation
public:
    // virtual OK here - ~CWnd already virtual
    virtual ~CEdit();
};
Насколько я понимаю тут есть только конструктор по умолчанию CEdit(); и нет некоего перемещающего конструктора.
И вот мой класс
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
class CMatrix : public CDialogEx
{
    DECLARE_DYNAMIC(CMatrix)
 
public:
    CMatrix(CWnd* pParent = nullptr);   // стандартный конструктор
    virtual ~CMatrix();
 
// Данные диалогового окна
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_MATRIX_DIALOG };
#endif
 
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV
    
    
// Реализация
protected:
    HICON m_hIcon;
    // Созданные функции схемы сообщений
    virtual BOOL OnInitDialog();
 
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void SelectFirstMatrixSizeRow();
    afx_msg void SelectFirstMatrixSizeCol();
    afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
private:
    CComboBox m_firstMatrixSizeRow;
    CComboBox m_firstMatrixSizeCol;
    CEdit m_firstMatrix40;
// Поля первой матрицы
protected:
    
    // 0-ая строка
    CEdit m_firstMatrix00;
    CEdit m_firstMatrix01;
    CEdit m_firstMatrix02;
    CEdit m_firstMatrix03;
    CEdit m_firstMatrix04;
    CEdit m_firstMatrix05;
    CEdit m_firstMatrix06;
    CEdit m_firstMatrix07;
    CEdit m_firstMatrix08;
    // 1-ая строка
    std::vector<std::vector<CEdit>> EditArea = { {m_firstMatrix00}, { m_firstMatrix01} };
};
Ругается на строку std::vector<std::vector<CEdit>> EditArea = { {m_firstMatrix00}, { m_firstMatrix01} };

Думаю иерархия классов не важна, но всё же CWnd -> CEdit и CWnd -> CDialog -> CDialogEx -> CMatrix, то есть оба эти класса имеют одного потомка.

Ошибка компилятора:
1>c:\users\host\source\repos\calcgpd\cal cgpd\cmatrix.h(53): error C2280: "CEdit::CEdit(const CEdit &)": предпринята попытка ссылки на удаленную функцию
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.1 4.26428\atlmfc\include\afxwin.h(3907): note: в этом месте создано компилятором: "CEdit::CEdit"


Что тут происходит? Почему нельзя так делать? Если в вектор накидывал бы числа, то проблем вообще никаких нет...

Добавлено через 10 минут
Опечатался.
Думаю иерархия классов не важна, но всё же CWnd -> CEdit и CWnd -> CDialog -> CDialogEx -> CMatrix, то есть оба эти класса имеют одного -парента.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2019, 13:37
Ответы с готовыми решениями:

Объясните, почему так нельзя делать?
using namespace std; uint32_t foo(uint32_t c, uint32_t a, const vector&lt; uint32_t&gt; &amp; data) { } int main() { uint32_t...

Почему не вызывается конструктор перемещения?
#include &lt;iostream&gt; #include &lt;vector&gt; class Object { public: Object() { std::cout &lt;&lt; &quot;Object()&quot; &lt;&lt; std::endl; ...

Почему не вызывается конструктор перемещения? И есть ли ошибки в коде?
Если вы увидели здесь что-то, что на приличной работе бы не пропустили по ревью, так как там С стиль, то напишите об этом. Мне интересно,...

52
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 14:47
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Timurs Посмотреть сообщение
Но у меня сходу идет аварийное завершение программы, в чем ошибка? То есть нажимаю на кнопку и у меня до открытия окна уже вылет идёт, то есть не то, что считать строку не могу, ввести даже не успеваю.
Потому, что указатель на TCHAR, LPTSTR, и указатель на CString - это совершенно разные вещи.
Сделай
C++
1
2
pWnd->GetDlgItemText(1022, *pStr);
pWnd->SetDlgItemText(1023, *pStr);
Добавлено через 30 секунд
Либо
C++
1
2
pWnd->GetDlgItemText(1022, Str);
pWnd->SetDlgItemText(1023, Str);
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 17:27  [ТС]
oleg-m1973, спасибо! Компилятор не ругается, но в соседнем поле не отображается текст, надо как-то обработчик прицепить или обновление сделать или как?

Добавлено через 8 минут
Ой, неправильно записал
Аварийный вылет
C++
1
2
3
CString Str = _T("");
pWnd->GetDlgItemText(1022, Str);
pWnd->SetDlgItemText(1023, Str);
Нет вылета и нет отображения
C++
1
2
3
CString Str = _T("");
GetDlgItemText(1022, Str);
SetDlgItemText(1023, Str);
Добавлено через 5 минут
Подправил, вылета нет, но и отображения на соседнем поле тоже нет
C++
1
2
3
4
5
CString Str = _T("");
pWnd = GetDlgItem(1022);
pWnd->GetDlgItemText(1022, Str);
pWnd = GetDlgItem(1023);
pWnd->SetDlgItemText(1023, Str);
0
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,406
22.07.2019, 17:29
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Храни в этом векторе указатели
Меня за указатели ругали, а тут советуют использовать указатели. Это другой случай - здесь нужно так.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 17:53
Цитата Сообщение от Timurs Посмотреть сообщение
Подправил, вылета нет, но и отображения на соседнем поле тоже нет
C++
1
2
3
4
5
6
7
CString Str = _T("");
pWnd = GetDlgItem(1022);
pWnd->GetWindowText(Str);
 
 
pWnd = GetDlgItem(1023);
pWnd->SetWindowText(Str);

А ты точно те id запрашиваешь?
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 18:01  [ТС]
oleg-m1973, да, специально зашел и перепроверил
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 18:03
Цитата Сообщение от Timurs Посмотреть сообщение
oleg-m1973, да, специально зашел и перепроверил
А что не отрабатывает GetText или SetText?
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 18:16  [ТС]
oleg-m1973, вызываю эту void CMatrix::SetNumberArea(CWnd* pWnd) функцию из BOOL CMatrix::OnInitDialog()

Добавлено через 5 минут
oleg-m1973,
не отработало...
C++
1
2
3
4
5
6
7
CString Str = _T("");
pWnd = GetDlgItem(1022);
pWnd->GetWindowText(Str);
 
 
pWnd = GetDlgItem(1023);
pWnd->SetWindowText(Str);
Добавлено через 2 минуты
Причём установка текста работает
C++
1
2
3
4
5
CString Str = _T("");
pWnd = GetDlgItem(1022);
pWnd->GetWindowText(Str);
pWnd = GetDlgItem(1023);
pWnd->SetWindowText(_T("11"));
Добавлено через 3 минуты
Полный код CMatrix.cpp
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
// CMatrix.cpp: файл реализации
//
 
#include "stdafx.h"
#include "CalcGPD.h"
#include "CMatrix.h"
#include "afxdialogex.h"
 
 
// Диалоговое окно CMatrix
 
IMPLEMENT_DYNAMIC(CMatrix, CDialogEx)
 
CMatrix::CMatrix(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_MATRIX_DIALOG, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    firstRow = 3;
    firstCol = 3;
    secondRow = 3;
    secondCol = 3;
}
 
CMatrix::~CMatrix()
{
}
 
void CMatrix::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_FIRST_MATRIX_SIZE_ROW, m_firstMatrixSizeRow);
    DDX_Control(pDX, IDC_FIRST_MATRIX_SIZE_COL, m_firstMatrixSizeCol);
    DDX_Control(pDX, IDC_SECOND_MATRIX_SIZE_ROW, m_secondMatrixSizeRow);
    DDX_Control(pDX, IDC_SECOND_MATRIX_SIZE_COL, m_secondMatrixSizeCol);
}
 
 
BEGIN_MESSAGE_MAP(CMatrix, CDialogEx)
    ON_CBN_SELCHANGE(IDC_FIRST_MATRIX_SIZE_ROW, &CMatrix::SelectFirstMatrixSizeRow)
    ON_CBN_SELCHANGE(IDC_FIRST_MATRIX_SIZE_COL, &CMatrix::SelectFirstMatrixSizeCol)
    ON_CBN_SELCHANGE(IDC_SECOND_MATRIX_SIZE_ROW, &CMatrix::SelectSecondMatrixSizeRow)
    ON_CBN_SELCHANGE(IDC_SECOND_MATRIX_SIZE_COL, &CMatrix::SelectSecondMatrixSizeCol)
END_MESSAGE_MAP()
 
 
// Обработчики сообщений CMatrix
 
BOOL CMatrix::OnInitDialog()
{
    CDialogEx::OnInitDialog();
 
    // Задает значок для этого диалогового окна. Среда делает это автоматически,
    // если главное окно приложения не является диалоговым
    SetIcon(m_hIcon, TRUE);     // Крупный значок
    SetWindowText(_T("Matrix Calculator")); // Заголовок диалогового окна
    // Количество строк первой матрицы
    m_firstMatrixSizeRow.AddString(_T("1"));
    m_firstMatrixSizeRow.AddString(_T("2"));
    m_firstMatrixSizeRow.AddString(_T("3"));
    m_firstMatrixSizeRow.AddString(_T("4"));
    m_firstMatrixSizeRow.AddString(_T("5"));
    m_firstMatrixSizeRow.AddString(_T("6"));
    m_firstMatrixSizeRow.AddString(_T("7"));
    m_firstMatrixSizeRow.AddString(_T("8"));
    m_firstMatrixSizeRow.AddString(_T("9"));
    // Количество столбцов первой матрицы
    m_firstMatrixSizeCol.AddString(_T("1"));
    m_firstMatrixSizeCol.AddString(_T("2"));
    m_firstMatrixSizeCol.AddString(_T("3"));
    m_firstMatrixSizeCol.AddString(_T("4"));
    m_firstMatrixSizeCol.AddString(_T("5"));
    m_firstMatrixSizeCol.AddString(_T("6"));
    m_firstMatrixSizeCol.AddString(_T("7"));
    m_firstMatrixSizeCol.AddString(_T("8"));
    m_firstMatrixSizeCol.AddString(_T("9"));
    
    // Количество строк второй матрицы
    m_secondMatrixSizeRow.AddString(_T("1"));
    m_secondMatrixSizeRow.AddString(_T("2"));
    m_secondMatrixSizeRow.AddString(_T("3"));
    m_secondMatrixSizeRow.AddString(_T("4"));
    m_secondMatrixSizeRow.AddString(_T("5"));
    m_secondMatrixSizeRow.AddString(_T("6"));
    m_secondMatrixSizeRow.AddString(_T("7"));
    m_secondMatrixSizeRow.AddString(_T("8"));
    m_secondMatrixSizeRow.AddString(_T("9"));
    // Количество столбцов второй матрицы
    m_secondMatrixSizeCol.AddString(_T("1"));
    m_secondMatrixSizeCol.AddString(_T("2"));
    m_secondMatrixSizeCol.AddString(_T("3"));
    m_secondMatrixSizeCol.AddString(_T("4"));
    m_secondMatrixSizeCol.AddString(_T("5"));
    m_secondMatrixSizeCol.AddString(_T("6"));
    m_secondMatrixSizeCol.AddString(_T("7"));
    m_secondMatrixSizeCol.AddString(_T("8"));
    m_secondMatrixSizeCol.AddString(_T("9"));
    
    ShowUserMatrix(m_firstMatrixArea, first, firstRow, firstCol);
    ShowUserMatrix(m_secondMatrixArea, second, secondRow, secondCol);
 
    SetNumberArea(m_firstMatrixArea, first);
    SetNumberArea(m_secondMatrixArea, second);
 
    return TRUE; // возврат значения TRUE, если фокус не передан элементу управления
}
 
void CMatrix::SelectFirstMatrixSizeRow()
{
    // TODO: добавьте свой код обработчика уведомлений
    firstRow = m_firstMatrixSizeRow.GetCurSel() + 1;
    ShowUserMatrix(m_firstMatrixArea, first, firstRow, firstCol);
}
 
void CMatrix::SelectFirstMatrixSizeCol()
{
    // TODO: добавьте свой код обработчика уведомлений
    firstCol = m_firstMatrixSizeCol.GetCurSel() + 1;
    ShowUserMatrix(m_firstMatrixArea, first, firstRow, firstCol);
}
 
void CMatrix::SelectSecondMatrixSizeRow()
{
    // TODO: добавьте свой код обработчика уведомлений
    secondRow = m_secondMatrixSizeRow.GetCurSel() + 1;
    ShowUserMatrix(m_secondMatrixArea, second, secondRow, secondCol);
}
 
void CMatrix::SelectSecondMatrixSizeCol()
{
    // TODO: добавьте свой код обработчика уведомлений
    secondCol = m_secondMatrixSizeCol.GetCurSel() + 1;
    ShowUserMatrix(m_secondMatrixArea, second, secondRow, secondCol);
}
 
void CMatrix::ShowUserMatrix(CWnd* pWnd, NameMatrix switch_on, int i, int j)
{
    // Показать матрицу пользователя
        for (row = 0; row < 9; row++) {
            for (col = 0; col < 9; col++) {
                switch (switch_on)
                {
                case first: { pWnd = GetDlgItem(1022 + 8 * row + col + row % 9);  break; }
                case second: { pWnd = GetDlgItem(1105 + 8 * row + col + row % 9); break; }
                default: break;
                }
                pWnd->ShowWindow(row < i && col > j - 1 || row > i - 1 ? SW_HIDE : SW_SHOW);
                //SetWindowPos(NULL, 50 * (i - 3), 181, 200 + 80 * j, 70 + 70 * i, SWP_NOMOVE | SWP_NOZORDER);
            }
        }
 
    // Сдвиги элементов управления
        Shift(m_secondMatrixArea, left);
        Shift(m_secondMatrixArea, top);
    // Подгонка окна
        WindowResizing();
    // Центрирование окна
        CenterWindow();
}
 
void CMatrix::Shift(CWnd* pWnd, NameShift switch_on)
{
    // Сдвиг матрицы справа к матрице слева
    switch (switch_on)
    {
    case left:
    {
        int x;
        int y;
        NameControl switch_control = matrix;
        switch (switch_control)
        {
        case matrix: {
            for (row = 0; row < 9; row++) {
                for (col = 0; col < 9; col++) {
                    pWnd = GetDlgItem(1105 + 8 * row + col + row % 9);
                    // Y
                    // Смещение по вертикали 21 + y, где y - координата поля в .rc файле
                    // Поля в верхней строке имеют координату y = 34
                    // Высота поля 22, зазор по вертикали 8
                    // Тогда между координатами полей соседних строк 30 пикселей
                    // X
                    // Смещение по горизонтали 155 + x, где x - координата поля в .rc файле
                    // Поля в левом столбце имеют координату x = 309
                    // Ширина поля 38, зазор по горизонтали 7
                    // Тогда между координатами полей соседних столбцов 45 пикселей
                    // Offset
                    // Расстояние по горизонтали до правой матрицы
                    // Подбирается экспериментально, критерий - видимый зазор между матрицами
                    // Здесь Offset = 200
                    firstCol > 3 ?
                        x = 200 + 45 * (col + firstCol - 3), y = 55 + 30 * row
                        :
                        x = 200 + 45 * col, y = 55 + 30 * row;
                        pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
                }
            }
            //break;
        }
        case text: {
            pWnd = GetDlgItem(IDC_STATIC_RIGHT1);
            firstCol > 3 ?
                x = 200 + 45 * (firstCol - 3), y = 6 + 9
                :
                x = 200, y = 6 + 9;
                pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
            pWnd = GetDlgItem(IDC_STATIC_RIGHT2);
            firstCol > 3 ?
                x = 332 + 45 * (firstCol - 3), y = 6 + 9
                :
                x = 332, y = 6 + 9;
                pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
            //break;
        }
        case combo: {
            pWnd = GetDlgItem(IDC_SECOND_MATRIX_SIZE_ROW);
            firstCol > 3 ?
                x = 298 + 45 * (firstCol - 3), y = 4 + 7
                :
                x = 298, y = 4 + 7;
                pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
            pWnd = GetDlgItem(IDC_SECOND_MATRIX_SIZE_COL);
            firstCol > 3 ?
                x = 344 + 45 * (firstCol - 3), y = 4 + 7
                :
                x = 344, y = 4 + 7;
                pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
            //break;
        }
        default:
            break;
        }
        break;
    }
    case top: 
    {
        int x;
        int y;
        NameControl switch_control = text;
        switch (switch_control)
        {
        case text: {
            pWnd = GetDlgItem(IDC_STATIC_DOWN);
            if (firstRow > secondRow) {
                if (firstRow > 3 && firstCol < 3) {
                    x = 140; 
                    y = 150 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
                }
                else if (firstRow >= 3 && firstCol >= 3) {                  
                    x = 140 + 45 * (firstCol - 3);                                          // Вниз
                    y = 150 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 140 + 45 * (firstCol - 3);                                          // Вверх
                    y = 150 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else {
                    x = 140;
                    y = 150 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
            else if (firstRow == secondRow) {
                if (firstRow > 3 && firstCol < 3) {
                    x = 140; 
                    y = 150 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
                }
                else if (firstRow >= 3 && firstCol >= 3) {
                    x = 140 + 45 * (firstCol - 3);                                          // Вниз
                    y = 150 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 140 + 45 * (firstCol - 3);                                          // Вверх
                    y = 150 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else {
                    x = 140; 
                    y = 150 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
            else {
                if (firstRow > 3 && firstCol < 3) {
                    x = 140; 
                    y = 150 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
 
                }
                else if (firstRow >= 3 && firstCol >= 3) {                  
                    x = 140 + 45 * (firstCol - 3);                                          // Вниз
                    y = 150 + 30 * (secondRow - 3);                                         //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 140 + 45 * (firstCol - 3);
                    y = 150 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вниз
                }
                else {
                    x = 140; 
                    y = 150 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
        }
        case combo: {
            pWnd = GetDlgItem(IDC_OPERATION);
            if (firstRow > secondRow) {
                if (firstRow > 3 && firstCol < 3) {
                    x = 150;
                    y = 168 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
                }
                else if (firstRow >= 3 && firstCol >= 3) {
                    x = 150 + 45 * (firstCol - 3);                                          // Вниз
                    y = 168 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 150 + 45 * (firstCol - 3);                                          // Вверх
                    y = 168 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else {
                    x = 150;
                    y = 168 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
            else if (firstRow == secondRow) {
                if (firstRow > 3 && firstCol < 3) {
                    x = 150;
                    y = 168 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
                }
                else if (firstRow >= 3 && firstCol >= 3) {
                    x = 150 + 45 * (firstCol - 3);                                          // Вниз
                    y = 168 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 150 + 45 * (firstCol - 3);                                          // Вверх
                    y = 168 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else {
                    x = 150;
                    y = 168 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
            else {
                if (firstRow > 3 && firstCol < 3) {
                    x = 150;
                    y = 168 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
 
                }
                else if (firstRow >= 3 && firstCol >= 3) {
                    x = 150 + 45 * (firstCol - 3);                                          // Вниз
                    y = 168 + 30 * (secondRow - 3);                                         //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 150 + 45 * (firstCol - 3);
                    y = 168 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вниз
                }
                else {
                    x = 150;
                    y = 168 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
        }
        case result: {
            pWnd = GetDlgItem(IDC_RESULT_MATRIX);
            if (firstRow > secondRow) {
                if (firstRow > 3 && firstCol < 3) {
                    x = 50;
                    y = 200 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
                }
                else if (firstRow >= 3 && firstCol >= 3) {
                    x = 50 + 45 * (firstCol - 3);                                           // Вниз
                    y = 200 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 50 + 45 * (firstCol - 3);                                           // Вверх
                    y = 200 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else {
                    x = 50;
                    y = 200 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
            else if (firstRow == secondRow) {
                if (firstRow > 3 && firstCol < 3) {
                    x = 50;
                    y = 200 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
                }
                else if (firstRow >= 3 && firstCol >= 3) {
                    x = 50 + 45 * (firstCol - 3);                                           // Вниз
                    y = 200 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 50 + 45 * (firstCol - 3);                                           // Вверх
                    y = 200 + 30 * (firstRow - 3);                                          //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else {
                    x = 50;
                    y = 200 + 30 * (firstRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
            else {
                if (firstRow > 3 && firstCol < 3) {
                    x = 50;
                    y = 200 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вправо
 
                }
                else if (firstRow >= 3 && firstCol >= 3) {
                    x = 50 + 45 * (firstCol - 3);                                           // Вниз
                    y = 200 + 30 * (secondRow - 3);                                         //   и
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // вправо
                }
                else if (firstRow < 3 && firstCol > 3) {
                    x = 50 + 45 * (firstCol - 3);
                    y = 200 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вниз
                }
                else {
                    x = 50;
                    y = 200 + 30 * (secondRow - 3);
                    pWnd->SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);        // Вверх
                }
            }
        }
        default:
            break;
        }
    }
    default:
        break;
    }   
}
 
void CMatrix::WindowResizing()
{
    int width;
    int height;
    if (firstRow >= secondRow) {
        if (firstCol <= 3 && secondCol <= 3) 
            width = 400, height = 400 + 30 * (firstRow - 3);
        else if (firstCol < 3 && secondCol > 3) 
            width = 400 + 45 * (secondCol - 3), height = 400 + 30 * (firstRow - 3);
        else if (firstCol > 3 && secondCol <= 3) 
            width = 400 + 45 * (firstCol - 3), height = 400 + 30 * (firstRow - 3);
        else 
            width = 400 + 45 * (firstCol + secondCol - 6), height = 400 + 30 * (firstRow - 3);
 
        SetWindowPos(NULL, 0, 0, width, height, SWP_NOMOVE);
    }
    else {
        if (firstCol <= 3 && secondCol <= 3)
            width = 400, height = 400 + 30 * (secondRow - 3);
        else if (firstCol < 3 && secondCol > 3)
            width = 400 + 45 * (secondCol - 3), height = 400 + 30 * (secondRow - 3);
        else if (firstCol > 3 && secondCol <= 3)
            width = 400 + 45 * (firstCol - 3), height = 400 + 30 * (secondRow - 3);
        else
            width = 400 + 45 * (firstCol + secondCol - 6), height = 400 + 30 * (secondRow - 3);
 
        SetWindowPos(NULL, 0, 0, width, height, SWP_NOMOVE);
    }
}
 
void CMatrix::SetNumberArea(CWnd* pWnd, NameMatrix switch_on)
{
    CString Str = _T("");
    pWnd = GetDlgItem(1022);
    pWnd->GetWindowText(Str);
    pWnd = GetDlgItem(1023);
    pWnd->SetWindowText(Str);
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 18:30
Цитата Сообщение от Timurs Посмотреть сообщение
Причём установка текста работает
Ну а сделай ещё

C++
1
2
Wnd->SetWindowText(_T("11"));
pWnd->GetWindowText(Str);
И посмотри, что у тебя в Str будет
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 18:41  [ТС]
oleg-m1973, а я вот и не пойму каким именно образом проверить, что лежит в Str. Поэтому и придумал проверку через вывод в эдит
Вот так кстати отработало
C++
1
2
3
4
5
6
7
8
9
10
void CMatrix::SetNumberArea(CWnd* pWnd/*, NameMatrix switch_on*/)
{
    CString Str = _T("");
    pWnd = GetDlgItem(1022);
    pWnd->SetWindowText(_T("Check!"));
    pWnd->GetWindowText(Str);
    pWnd = GetDlgItem(1023);
    pWnd->SetWindowText(Str);
    //UpdateData(FALSE);
}
Получается вводить данные в один эдит и в процессе ввода чтобы они показывались в других эдитах делать нельзя?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 18:44
Цитата Сообщение от Timurs Посмотреть сообщение
oleg-m1973, а я вот и не пойму каким именно образом проверить, что лежит в Str. Поэтому и придумал проверку через вывод в эдит
Вот так кстати отработало
В поставил бы точку останова F9 на нужной строке и запустил в отладчике - F5.

Раз сработало, значит контрол 1022 был пустым.
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 19:38  [ТС]
oleg-m1973, почему пустым? Вначале Str была пустой, затем в пустое поле 1022 записали check!, затем его считали в Str, затем записали Str в 1023. Что и произошло.

Собственно мне надо было удостовериться, что данные с поля считываются вообще. Изначально планирую в цикле во все поля писать 1, это будут матрицы по умолчанию. Затем когда пользователь забъет свои значения надо как-то грамотно вычислить произведение матриц, в консоли это легко, а тут не знаю, хотелось бы без массива все организовать, то есть вычисляется a00*b00+a01*b10+a02+b 20 и результат выводится в эдит резал, и т. д. Но после того как будет вычислена строка результирующей матрицы в эдит резал те надо каким-то образом перейти на следующую строку. Собственно если разберусь с этим механизмом, то калькулятор будет готов...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 21:06
Цитата Сообщение от Timurs Посмотреть сообщение
oleg-m1973, почему пустым? Вначале Str была пустой, затем в пустое поле 1022 записали check!, затем его считали в Str, затем записали Str в 1023. Что и произошло.
Не Str была пустой, а содержимое контрола 1022 было пустым, причём стопудово

Цитата Сообщение от Timurs Посмотреть сообщение
pWnd = GetDlgItem(1022);
pWnd->GetWindowText(Str);
Ты что-то туда записывал перед этим?

Цитата Сообщение от Timurs Посмотреть сообщение
Изначально планирую в цикле во все поля писать 1, это будут матрицы по умолчанию. Затем когда пользователь забъет свои значения надо как-то грамотно вычислить произведение матриц, в консоли это легко, а тут не знаю, хотелось бы без массива все организовать,
Разве в консоле это без массива организовывается?

Что-то я потерял нить. Что ты конкретно хочешь сделать какие окошки нарисовать, что-куда вывести?
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 21:36  [ТС]
oleg-m1973,
Ты что-то туда записывал перед этим?
да
C++
1
2
3
pWnd = GetDlgItem(1022);
pWnd->SetWindowText(_T("Check!"));
pWnd->GetWindowText(Str);
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Разве в консоле это без массива организовывается?
В консоли с массивом разумеется, а в mfc пока ещё не понял, вроде без массива можно провернуть.

Хочу в данный момент следующее, пользователь ввел в поле число, хочу его забрать.

Вот посмотрите в экзэшнике матрицы, вот когда числа вводите в поля, надо их извлечь
Вложения
Тип файла: 7z CalcGPD.7z (2.20 Мб, 2 просмотров)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 21:42
Цитата Сообщение от Timurs Посмотреть сообщение
да
C++Выделить код
1
2
3
pWnd = GetDlgItem(1022);
pWnd->SetWindowText(_T("Check!"));
pWnd->GetWindowText(Str);
Мне показалось, что там вопрос возник намного задолго до того, как ты записал туда "Check!".
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 21:45  [ТС]
oleg-m1973, тем не менее вопрос не решен, если я в программе пропишу сам число, то оно извлекается, а если пользователь напишет, то как понимаю не извлекается...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 21:49
Цитата Сообщение от Timurs Посмотреть сообщение
oleg-m1973, тем не менее вопрос не решен, если я программе пропишу сам число, то оно извлекается, а если пользователь напишет, то как понимаю не извлекается...
А он, пользователь, точно туда что-то писал?

Добавлено через 2 минуты
И, я тебя вроде спрашивал - что ты хочешь сделать?
С виду, задача примитивная, но что ты там пытаешься наворотить, совершенно непонятно.
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 21:55  [ТС]
oleg-m1973, если в поля на рисунке введете числа, то в другом поле хочу показать их произведение
Миниатюры
Почему нельзя так делать? Конструктор перемещения?  
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 21:58  [ТС]
А он, пользователь, точно туда что-то писал?
Так как пишу калькулятор, то подразумеваю, что пользователь им воспользуется
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.07.2019, 22:15
Цитата Сообщение от Timurs Посмотреть сообщение
Так как пишу калькулятор, то подразумеваю, что пользователь им воспользуется
Мне показалось, что ты читаешь оттуда до того, как он им воспользовался.
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
22.07.2019, 22:42  [ТС]
oleg-m1973, понял)) А как понять, что он им воспользовался?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2019, 22:42
Помогаю со студенческими работами здесь

Почему нельзя вызывать конструктор без аргументов?
В чем может быть ошибка? На Visual Studio все работает #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class...

Ошибка в классе или так делать нельзя?
#include &lt;iostream&gt; using namespace std; class student { public: virtual void vvod (int a ,int b ,int c){pa=c;} virtual...

Почему в абстрактном классе можно вызвать конструктор но объект создать нельзя?
class A { protected: std::string str; public: A(std ::string s) :str(s) { std::cout &lt;&lt; &quot;const&quot;; }; virtual std::string...

Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
То есть честно говоря, вопрос так надо ставить: почему если конструктор встроенный, то можно использовать параметр (по умолчанию) шаблона...

Почему нельзя сделать так?
И как правильно сделать то, что я хочу сделать?) int num = 7; char ch = (char)num; ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru