С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/35: Рейтинг темы: голосов - 35, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22

Checkbox проверка условий

11.03.2011, 14:24. Показов 6678. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть четыре кнопки Checkbox. Если я нажимаю на "Draw circle" то у меня рисуется круг черного цвета, если я нажимаю на "Red", то у меня круг закрашивается в красный цвет, ну так и с остальными, ну а мне нужно сделать так чтобы, когда я нажимаю на "ред", то круг закрашивается, а когда отключаю, то он стает заново черным,еще если у меня вкл. "ред" и "грин" то круг должен за краситься в другой цвет к примеру "браун", ну а если три у меня выделенных то круг должен стать белым. Я работаю в Visual Studio 2008.
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
498
499
// Lesson1Dlg.cpp : implementation file
//
 
#include "stdafx.h"
#include "Lesson1.h"
#include "Lesson1Dlg.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
 
class CAboutDlg : public CDialog
{
public:
    CAboutDlg();
 
// Dialog Data
    //{{AFX_DATA(CAboutDlg)
    enum { IDD = IDD_ABOUTBOX };
    //}}AFX_DATA
 
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CAboutDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL
 
// Implementation
protected:
    //{{AFX_MSG(CAboutDlg)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
}
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutDlg)
    //}}AFX_DATA_MAP
}
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    //{{AFX_MSG_MAP(CAboutDlg)
        // No message handlers
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CLesson1Dlg dialog
 
CLesson1Dlg::CLesson1Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CLesson1Dlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CLesson1Dlg)
    m_EditText = 0;
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CLesson1Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CLesson1Dlg)
    DDX_Control(pDX, IDC_PROGRESS1, m_VProgress);
    DDX_Control(pDX, IDC_PROGRESS2, m_HProgress);
    DDX_Control(pDX, IDC_COMBO1, m_Combo);
    DDX_Control(pDX, IDC_CHECK1, m_Check);
    DDX_Control(pDX, IDC_LIST1, m_List);
    DDX_Control(pDX, IDC_SLIDER2, m_HSlider);
    DDX_Control(pDX, IDC_SLIDER1, m_VSlider);
    DDX_Text(pDX, IDC_CALC_ON_EDIY, m_EditText);
    //}}AFX_DATA_MAP
}
 
BEGIN_MESSAGE_MAP(CLesson1Dlg, CDialog)
    //{{AFX_MSG_MAP(CLesson1Dlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
    ON_BN_CLICKED(IDC_BTN_SUB, OnBtnSub)
    ON_BN_CLICKED(IDC_BTN_RETRIVE, OnBtnRetrive)
    ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
    ON_CBN_EDITCHANGE(IDC_COMBO1, OnEditchangeCombo1)
    ON_BN_CLICKED(IDC_COLOR_RED, OnColorRed)
    ON_BN_CLICKED(IDC_COLOR_GREEN, OnColorGreen)
    ON_BN_CLICKED(IDC_COLOR_BLUE, OnColorBlue)
    ON_WM_HSCROLL()
    ON_WM_VSCROLL()
    ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
    ON_EN_CHANGE(IDC_CALC_ON_EDIT, OnChangeCalcOnEdit)
    //}}AFX_MSG_MAP
    ON_BN_CLICKED(IDC_CHECK2, &CLesson1Dlg::OnBnClickedCheck2)
    ON_BN_CLICKED(IDC_CHECK3, &CLesson1Dlg::OnBnClickedCheck3)
    ON_BN_CLICKED(IDC_CHECK4, &CLesson1Dlg::OnBnClickedCheck4)
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CLesson1Dlg message handlers
 
BOOL CLesson1Dlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    // Add "About..." menu item to system menu.
 
    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
 
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
 
    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
    
    // TODO: Add extra initialization here
    m_VProgress.SetPos (0);
    m_HProgress.SetPos (10);
    m_VSlider.SetRange( 0, 10, TRUE );
    m_HSlider.SetRange( 0, 10, TRUE );
    m_VProgress.SetRange( 0, 10 );
    m_HProgress.SetRange( 0, 10 );
    m_nColorID = 0;
    m_Combo.AddString( "Reset all" );
    return TRUE;  // return TRUE  unless you set the focus to a control
}
 
void CLesson1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}
 
// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.
 
void CLesson1Dlg::OnPaint() 
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
        CWnd* pWndDraw = GetDlgItem( IDC_DRAW_AREA );
        if ( pWndDraw && ( m_Check.GetCheck() == 1 ))
        {
            CRect rect;
            pWndDraw->GetClientRect( rect );
 
            CClientDC dcDraw( pWndDraw );
            CPen* pOldPen;
            CPen NewPen;
            CBrush* pOldBrush;
            CBrush NewBrush;
 
            pOldPen = dcDraw.GetCurrentPen();
            pOldBrush = dcDraw.GetCurrentBrush();
            
            switch ( m_nColorID )
            {
            case 0:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 0,0,0 ) );
                }
                break;
            case 1:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 255, 0, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 255, 0, 0 ) );
                }
                break;
            case 2:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 255, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 0, 255, 0 ) );
                }
                break;
            case 3:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 255 ));
                    NewBrush.CreateSolidBrush( RGB( 0, 0, 255 ) );
                }
                break;
                case 4:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 255, 0, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 255, 0, 0 ) );
                }
                break;
                case 5:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 255, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 0, 255, 0 ) );
                }
                break;
                case 6:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 255 ));
                    NewBrush.CreateSolidBrush( RGB( 0, 0, 255 ) );
                }
                break;
            default:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 255, 255, 255 ) );
                }
            }
            dcDraw.SelectObject( &NewPen );
            dcDraw.SelectObject( &NewBrush );
            
            dcDraw.Ellipse( &rect );
            
            dcDraw.SelectObject( pOldPen );
            dcDraw.SelectObject( pOldBrush );
            NewPen.DeleteObject();
            NewBrush.DeleteObject();
        }
    }
}
 
/*{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}
*/
 
// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CLesson1Dlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}
 
void CLesson1Dlg::OnBtnAdd() 
{
    // TODO: Add your control notification handler code here
m_EditText++;
UpdateData( FALSE );
char szBuf[128];
sprintf( szBuf, "Нажата кнопка \"+\"" );
m_List.AddString( szBuf );
    
sprintf( szBuf, "%d", m_EditText );
SetDlgItemText( IDC_CALC_ON_STATIC, szBuf );
 
sprintf( szBuf, "%d", m_EditText);
SetDlgItemText(IDC_CALC_ON_EDIT, szBuf);
 
CString s;
GetDlgItemText(IDC_CALC_ON_EDIT,s);
m_List.AddString( s );
 
}
 
void CLesson1Dlg::OnBtnSub() 
{
    // TODO: Add your control notification handler code here
    m_EditText--;
UpdateData( FALSE );
char szBuf[128];
sprintf( szBuf, "Нажата кнопка \"-\"" );
m_List.AddString( szBuf );
 
sprintf( szBuf, "%d", m_EditText );
SetDlgItemText( IDC_CALC_ON_STATIC, szBuf );
 
CString s;
GetDlgItemText(IDC_CALC_ON_EDIT,s);
m_List.AddString( s );
 
 
}
 
void CLesson1Dlg::OnBtnRetrive() 
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    char szBuf[32];
    sprintf( szBuf, "Введено число: %d", m_EditText );
    m_List.AddString( szBuf );
 
}
 
void CLesson1Dlg::OnCheck1() 
{
    // TODO: Add your control notification handler code here
    UpdateData( TRUE );
    Invalidate();
}
 
void CLesson1Dlg::OnEditchangeCombo1() 
{
    // TODO: Add your control notification handler code here
    
}
 
void CLesson1Dlg::OnColorRed() 
{
    // TODO: Add your control notification handler code here
    m_nColorID = 1;
    Invalidate();
 
}
 
void CLesson1Dlg::OnColorGreen() 
{
    // TODO: Add your control notification handler code here
    m_nColorID = 2;
    Invalidate();
 
}
 
void CLesson1Dlg::OnColorBlue() 
{
    // TODO: Add your control notification handler code here
    m_nColorID = 3;
    Invalidate();
 
}
 
void CLesson1Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default
    if ( nSBCode == SB_THUMBTRACK )
    {
    m_HProgress.SetPos( m_HSlider.GetRangeMax() -m_HSlider.GetPos() );
    UpdateData(false);
    }
    
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
 
void CLesson1Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default
    m_VProgress.SetPos( m_VSlider.GetPos() );
    UpdateData(false);
 
    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
 
void CLesson1Dlg::OnSelchangeCombo1() 
{
    // TODO: Add your control notification handler code here
    m_List.ResetContent();
    char szBuf[128];
    int nIndex = m_Combo.GetCurSel();
    switch ( nIndex )
    {
        case 0:
        {
        sprintf( szBuf, "2 4 6 8");
        m_List.AddString( szBuf );
        }
        break;
        case 1:
        {
        sprintf( szBuf, "1 3 5 7 9");
        m_List.AddString( szBuf );
        }
        break;
        case 2:
        {
            m_EditText = 0;
            
            char szBuf[128];
            sprintf( szBuf, "0");
            m_HProgress.SetPos(0);
            m_VProgress.SetPos(0);
 
            SetDlgItemText( IDC_CALC_ON_STATIC, szBuf );
            m_Check.SetCheck( 0 );
            m_nColorID = 0;
            m_HSlider.SetPos(0);
            m_VSlider.SetPos(0);
            UpdateData(FALSE);
            Invalidate();
}
break;
default:
{
m_EditText = 0;
UpdateData(TRUE);
m_Check.SetCheck( 0 );
m_nColorID = 0;
 
Invalidate();
}
}
 
    
}
 
 
 
void CLesson1Dlg::OnChangeCalcOnEdit() 
{
    // TODO: If this is a RICHEDIT control, the control will not
    // send this notification unless you override the CDialog::OnInitDialog()
    // function and call CRichEditCtrl().SetEventMask()
    // with the ENM_CHANGE flag ORed into the mask.
    
    // TODO: Add your control notification handler code here
    
    UpdateData( true );
    char szBuf[128];
    sprintf( szBuf, "%d", m_EditText );
    SetDlgItemText( IDC_CALC_ON_STATIC, szBuf );
    
 
}
 
void CLesson1Dlg::OnBnClickedCheck2()
{
    // TODO: добавьте свой код обработчика уведомлений
    m_nColorID = 4;
    Invalidate();
}
 
void CLesson1Dlg::OnBnClickedCheck3()
{
    // TODO: добавьте свой код обработчика уведомлений
    m_nColorID = 5;
    Invalidate();
}
 
void CLesson1Dlg::OnBnClickedCheck4()
{
    // TODO: добавьте свой код обработчика уведомлений
    m_nColorID = 6;
    Invalidate();
}
Миниатюры
Checkbox проверка условий   Checkbox проверка условий   Checkbox проверка условий  

Checkbox проверка условий  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.03.2011, 14:24
Ответы с готовыми решениями:

Проверка условий
Доброго времени суток, уважаемые форумчане) столкнулся с проблемой проверки условий в базе данных, а именно нужно проверить при добавлении...

Проверка условий
Здравствуйте, подскажите,пожалуйста, как прописать условия проверки. Мне нужно: если вводится радиус k больше одной из сторон, выводилось...

Проверка нескольких условий
Здравствуйте. Есть массив чисел А. Мне нужно проверить все ли они меньше единицы -...

17
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
12.03.2011, 00:24
лень перечитывать весь код, на самом деле
если я правильно понял, то:

итак смотри начитная со 169 строки, там самое сладкое.

начиная с 200-й строки в case-ах в switch смотри подробнее


C++
1
2
3
4
5
6
 case 0:
                                {
                                        NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 0 ));
                                        NewBrush.CreateSolidBrush( RGB( 0,0,0 ) );
                                }
                                break;
он по идее и так должен становиться черным, при снятии всех отметок


по-моему легче создать отдельные элементы для RGB( rr, gg, bb ): rr, gg, bb
и дальше делать так например:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
switch ( m_nColorID )
{
...
case 1:             // воткнуть какую-либо проверку на максимально допустимое значение rr (<=255)
                       rr+=255;
                            break;
 
...
blah blah blah
}
 
        NewPen.CreatePen( PS_SOLID, 1, RGB( rr, gg, bb ));
        NewBrush.CreateSolidBrush( RGB( rr, gg, bb ) );
но это все равно будет неправильно =)))
*нужно смотреть по возвращаемому значению чекбокса, ибо я не помню как и что он возвращает при множественном выборе

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

плюс: перед каждой проверкой возвращаемого результата чекбокса обнулять RGB (rr, gg ,bb)

надеюсь я смог объяснить свою мысль.
1
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
12.03.2011, 19:33  [ТС]
Попробовал ничего не получилось, пишет ошибку.
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
12.03.2011, 22:41
странно

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
// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.
 
void CLesson1Dlg::OnPaint() 
{
        if (IsIconic())
        {
                CPaintDC dc(this); // device context for painting
 
                SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
                // Center icon in client rectangle
                int cxIcon = GetSystemMetrics(SM_CXICON);
                int cyIcon = GetSystemMetrics(SM_CYICON);
                CRect rect;
                GetClientRect(&rect);
                int x = (rect.Width() - cxIcon + 1) / 2;
                int y = (rect.Height() - cyIcon + 1) / 2;
 
                // Draw the icon
                dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
                CDialog::OnPaint();
                CWnd* pWndDraw = GetDlgItem( IDC_DRAW_AREA );
                if ( pWndDraw && ( m_Check.GetCheck() == 1 ))
                {
                        CRect rect;
                        pWndDraw->GetClientRect( rect );
 
                        CClientDC dcDraw( pWndDraw );
                        CPen* pOldPen;
                        CPen NewPen;
                        CBrush* pOldBrush;
                        CBrush NewBrush;
 
                        pOldPen = dcDraw.GetCurrentPen();
                        pOldBrush = dcDraw.GetCurrentBrush();
 
                        // changes begin
                        
                        // declare an RGB values
                                                  // RGB values for BRUSH
                        BYTE tGreenBrush     = 0;
                        BYTE tBlueBrush   = 0;
                        BYTE tRedBrush    = 0;
 
                                                   // RGB values for PEN
                        BYTE tGreenPen     = 0;
                        BYTE tBluePen      = 0;
                        BYTE tRedPen       = 0;
 
                        
                        // calculate RGB values
                        switch ( m_nColorID )
                        {
                         
                      case 0:
                                {
                                 ; // drinking coffee
                                }
                                break;
            
            
                        case 1:
                                {
                                        tRedBrush +=255;
 
                                        tRedPen +=255;
                                }
                                break;
                        case 2:
                                {
                                        tGreenBrush +=255;
 
                                        tGreenPen +=255;
                                }
                                break;
                        case 3:
                                {
                                        tBlueBrush +=255;
 
                                        tBluePen +=255;
                                }
                                break;
                        case 4:
                                {
                                       tRedBrush    += 255;
                       tGreenBrush += 255;
 
                                       tRedPen    += 255;
                       tGreenPen += 255;
                                }
                                break;
                         case 5:
                                {
                                       tGreenBrush +=255;
                       tBlueBrush +=255;
 
                                       tGreenPen +=255;
                       tBluePen +=255;
                                }
                                break;
                         case 6:
                               {
                                        tRedBrush += 255;
                    tBlueBrush += 255;
 
                                        tRedPen += 255;
                    tBluePen += 255;
                                }
                                break;
                        default:
                                {
                    tGreenPen   += 255;
                    tBluePen     += 255;
                    tRedPen      += 255;
                                }
 
                        }
 
                        // set section out of "switch"
         NewPen.CreatePen( PS_SOLID, 1, RGB( tRedPen, tGreenPen, tBluePen ));    
                 NewBrush.CreateSolidBrush( RGB( tRedBrush, tGreenBrush, tBlueBrush ) );
 
                     // end of changes
 
                        dcDraw.SelectObject( &NewPen );
                        dcDraw.SelectObject( &NewBrush );
                        
                        dcDraw.Ellipse( &rect );
                        
                        dcDraw.SelectObject( pOldPen );
                        dcDraw.SelectObject( pOldBrush );
                        NewPen.DeleteObject();
                        NewBrush.DeleteObject();
                }
        }
}
я вот так имел ввиду, для начала
по идее должно нормально скомпилиться
1
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
13.03.2011, 02:11  [ТС]
Я попробовал этот код, он конечно без ошибок компилировал "спасибо за код", но в дело в том что она работает так как и я сделал, просто только цвета другие. А здесь нужно сделать так чтобы при нажатие "checkbox" круг перекрашивался, а при отключение он переходил в первоначальное положение.

Добавлено через 55 секунд
Если знаете то помогите пожалуйста, просто интересно, как это можно сделать))
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
13.03.2011, 05:08
ок.
попробуй старым дедовским методом
вставь перед свичом

C++
1
2
3
4
char tCheckBoxResult[10]="Sel: ";
tCHeckBoxResult[5] = m_nColorID + 0x30;
tCHeckBoxResult[6] = NULL;
MessageBoxA(0, tCHeckBoxResult, 0, 0);
и посмотри, что напишет диалоговое окошко при выборе всех возможных вариантов комбинаций цветов чекбокса.

п.с.: дык мне тоже интересно =)
1
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
13.03.2011, 12:36  [ТС]
ну я попробовал и у меня все равно выдает ошибку но программка запускается, ну все равно все по старому))
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
void CLesson1Dlg::OnPaint() 
{
        if (IsIconic())
        {
                CPaintDC dc(this); // device context for painting
 
                SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
                // Center icon in client rectangle
                int cxIcon = GetSystemMetrics(SM_CXICON);
                int cyIcon = GetSystemMetrics(SM_CYICON);
                CRect rect;
                GetClientRect(&rect);
                int x = (rect.Width() - cxIcon + 1) / 2;
                int y = (rect.Height() - cyIcon + 1) / 2;
 
                // Draw the icon
                dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
                CDialog::OnPaint();
                CWnd* pWndDraw = GetDlgItem( IDC_DRAW_AREA );
                if ( pWndDraw && ( m_Check.GetCheck() == 1 ))
                {
                        CRect rect;
                        pWndDraw->GetClientRect( rect );
 
                        CClientDC dcDraw( pWndDraw );
                        CPen* pOldPen;
                        CPen NewPen;
                        CBrush* pOldBrush;
                        CBrush NewBrush;
 
                        pOldPen = dcDraw.GetCurrentPen();
                        pOldBrush = dcDraw.GetCurrentBrush();
 
                                                // changes begin
                                                
                                                // declare an RGB values
                                                  // RGB values for BRUSH
                                                BYTE tGreenBrush         = 0;
                                                BYTE tBlueBrush   = 0;
                                                BYTE tRedBrush    = 0;
 
                                                   // RGB values for PEN
                                                BYTE tGreenPen     = 0;
                                                BYTE tBluePen      = 0;
                                                BYTE tRedPen       = 0;
 
                        
                                                // calculate RGB values
 
 
                char tCheckBoxResult[10]="Sel: ";// Вот это вы мне сказали
                tCHeckBoxResult[5] = m_nColorID + 0x30;
                tCHeckBoxResult[6] = NULL;
                MessageBoxA(0, tCHeckBoxResult, 0, 0);
 
 
                        switch ( m_nColorID )
                        {
                         
                      case 0:
                                {
                                 ; // drinking coffee
                                }
                                break;
                        
                        
                        case 1:
                                {
                                        tRedBrush +=255;
 
                                        tRedPen +=255;
                                }
                                break;
                        case 2:
                                {
                                        tGreenBrush +=255;
 
                                        tGreenPen +=255;
                                }
                                break;
                        case 3:
                                {
                                        tBlueBrush +=255;
 
                                        tBluePen +=255;
                                }
                                break;
                        case 4:
                                {
                                       tRedBrush    += 255;
                                       tGreenBrush += 255;
 
                                       tRedPen    += 255;
                                       tGreenPen += 255;
                                }
                                break;
                         case 5:
                                {
                                       tGreenBrush +=255;
                                       tBlueBrush +=255;
 
                                       tGreenPen +=255;
                                       tBluePen +=255;
                                }
                                break;
                         case 6:
                               {
                                        tRedBrush += 255;
                                        tBlueBrush += 255;
 
                                        tRedPen += 255;
                                        tBluePen += 255;
                                }
                                break;
                        default:
                                {
                                        tGreenPen   += 255;
                                        tBluePen     += 255;
                                        tRedPen      += 255;
                                }
 
                        }
 
                                                // set section out of "switch"
                 NewPen.CreatePen( PS_SOLID, 1, RGB( tRedPen, tGreenPen, tBluePen ));    
                 NewBrush.CreateSolidBrush( RGB( tRedBrush, tGreenBrush, tBlueBrush ) );
 
                                         // end of changes
 
                        dcDraw.SelectObject( &NewPen );
                        dcDraw.SelectObject( &NewBrush );
                        
                        dcDraw.Ellipse( &rect );
                        
                        dcDraw.SelectObject( pOldPen );
                        dcDraw.SelectObject( pOldBrush );
                        NewPen.DeleteObject();
                        NewBrush.DeleteObject();
                }
        }
}
Может проста я не правильно понял вас? Ну она все равно не хочет работать так как нужно)
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
13.03.2011, 14:25
правильно понял.
после последнего изменения при любом действии он должен выбивать диалоговое окно с заголовком и иконкой ошибки и текстом, который является по сути возвращаемым значением чекбокса.

а что происходит на самом деле?
1
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
13.03.2011, 15:02  [ТС]
Я посмотрел, какие там ошибки и там была простая ошибка. Но когда я ее исправил, то она начала выдавай другую ошибку
C++
1
 error C2660: CWnd::MessageBoxA: функция не принимает 4 аргументов
но если я убираю последний нолик, то она компилируется без ошибок, но выдает такое диалоговое окно.
C++
1
2
3
4
char tCheckBoxResult[10]="Sel: ";
tCheckBoxResult[5] = m_nColorID + 0x30;
CheckBoxResult[6] = NULL;
MessageBoxA(0, tCheckBoxResult, 0, 0);
Я убрал и у меня получилось так

C++
1
2
3
4
char tCheckBoxResult[10]="Sel: ";
tCheckBoxResult[5] = m_nColorID + 0x30;
CheckBoxResult[6] = NULL;
MessageBoxA(0, tCheckBoxResult, 0);
0
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
14.03.2011, 00:04  [ТС]
Я забыл дописать в предыдущем сообщение, что при этом она тоже выдает ошибку, но ошибку выдает уже в диалоговом окне и эта ошибка на каждом нажатии "Checkbox", ну если нажать ок, то круг все равно закрашивается в черный или другие цвета, но он не делает то что нужно.
Миниатюры
Checkbox проверка условий  
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
14.03.2011, 02:43
она и должна выдавать ошибку, точнее диалоговое окно ошибки, заголовок окна - код чекобкса, который он возвращает при выборе одного из вариантов.

теперь перебери все комбинации выбора чекбокса, и посмотри коды, которые он возвращает.
желательно потом их написать сюда.
1
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
16.03.2011, 15:51  [ТС]
Вот я как бы сделал программку(ну не я сделал, я попросил), и она вроде бы работает правильно, но так как я только начал изучать С++, то я не могу понять некоторых значений.

Вот весь код программки:
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
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
// Lesson1Dlg.cpp : implementation file
//
 
#include "stdafx.h"
#include "Lesson1.h"
#include "Lesson1Dlg.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
 
bool _bIsGreen = false;
bool _bIsRed = false;
bool _bIsBlue = false;
 
class CAboutDlg : public CDialog
{
public:
 
    CAboutDlg();
 
// Dialog Data
    //{{AFX_DATA(CAboutDlg)
    enum { IDD = IDD_ABOUTBOX };
    //}}AFX_DATA
 
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CAboutDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL
 
// Implementation
protected:
    //{{AFX_MSG(CAboutDlg)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
}
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutDlg)
    //}}AFX_DATA_MAP
}
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    //{{AFX_MSG_MAP(CAboutDlg)
        // No message handlers
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CLesson1Dlg dialog
 
CLesson1Dlg::CLesson1Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CLesson1Dlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CLesson1Dlg)
    m_EditText = 0;
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CLesson1Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CLesson1Dlg)
    DDX_Control(pDX, IDC_PROGRESS1, m_VProgress);
    DDX_Control(pDX, IDC_PROGRESS2, m_HProgress);
    DDX_Control(pDX, IDC_COMBO1, m_Combo);
    DDX_Control(pDX, IDC_CHECK1, m_Check);
    DDX_Control(pDX, IDC_LIST1, m_List);
    DDX_Control(pDX, IDC_SLIDER2, m_HSlider);
    DDX_Control(pDX, IDC_SLIDER1, m_VSlider);
    DDX_Text(pDX, IDC_CALC_ON_EDIY, m_EditText);
    //}}AFX_DATA_MAP
}
 
BEGIN_MESSAGE_MAP(CLesson1Dlg, CDialog)
    //{{AFX_MSG_MAP(CLesson1Dlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
    ON_BN_CLICKED(IDC_BTN_SUB, OnBtnSub)
    ON_BN_CLICKED(IDC_BTN_RETRIVE, OnBtnRetrive)
    ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
    ON_CBN_EDITCHANGE(IDC_COMBO1, OnEditchangeCombo1)
    ON_BN_CLICKED(IDC_COLOR_RED, OnColorRed)
    ON_BN_CLICKED(IDC_COLOR_GREEN, OnColorGreen)
    ON_BN_CLICKED(IDC_COLOR_BLUE, OnColorBlue)
    ON_WM_HSCROLL()
    ON_WM_VSCROLL()
    ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
    ON_EN_CHANGE(IDC_CALC_ON_EDIT, OnChangeCalcOnEdit)
    //}}AFX_MSG_MAP
    ON_BN_CLICKED(IDC_CHECK2, &CLesson1Dlg::OnBnClickedCheck2)
    ON_BN_CLICKED(IDC_CHECK3, &CLesson1Dlg::OnBnClickedCheck3)
    ON_BN_CLICKED(IDC_CHECK4, &CLesson1Dlg::OnBnClickedCheck4)
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CLesson1Dlg message handlers
 
BOOL CLesson1Dlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    // Add "About..." menu item to system menu.
 
    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
 
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
 
    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
    
    // TODO: Add extra initialization here
    m_VProgress.SetPos (0);
    m_HProgress.SetPos (10);
    m_VSlider.SetRange( 0, 10, TRUE );
    m_HSlider.SetRange( 0, 10, TRUE );
    m_VProgress.SetRange( 0, 10 );
    m_HProgress.SetRange( 0, 10 );
    m_nColorID = 0;
    m_Combo.AddString( "Reset all" );
    return TRUE;  // return TRUE  unless you set the focus to a control
}
 
void CLesson1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}
 
// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.
 
void CLesson1Dlg::OnPaint() 
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
        CWnd* pWndDraw = GetDlgItem( IDC_DRAW_AREA );
        if ( pWndDraw && ( m_Check.GetCheck() == 1 ))
        {
            CRect rect;
            pWndDraw->GetClientRect( rect );
 
            CClientDC dcDraw( pWndDraw );
            CPen* pOldPen;
            CPen NewPen;
            CBrush* pOldBrush;
            CBrush NewBrush;
 
            pOldPen = dcDraw.GetCurrentPen();
            pOldBrush = dcDraw.GetCurrentBrush();
            
            int red = 0;
            int green = 0;
            int blue = 0;
 
            if(_bIsRed)
            {
                red = 255;
            }
 
            if(_bIsGreen)
            {
                green = 255;
            }
 
            if(_bIsBlue)
            {
                blue = 255;
            }
 
            NewPen.CreatePen( PS_SOLID, 1, RGB( red, green, blue ));
            NewBrush.CreateSolidBrush( RGB( red, green, blue ) );
 
            /*switch ( m_nColorID )
            {
            case 0:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 0,0,0 ) );
                }
                break;
            case 1:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 255, 0, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 255, 0, 0 ) );
                }
                break;
            case 2:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 255, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 0, 255, 0 ) );
                }
                break;
            case 3:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 255 ));
                    NewBrush.CreateSolidBrush( RGB( 0, 0, 255 ) );
                }
                break;
            case 4:
            {
                NewPen.CreatePen( PS_SOLID, 1, RGB( 255, 0, 0 ));
                NewBrush.CreateSolidBrush( RGB( 255, 0, 0 ) );
            }
                break;
            case 5:
            {
                NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 255, 0 ));
                NewBrush.CreateSolidBrush( RGB( 0, 255, 0 ) );
            }
                break;
            case 6:
            {
                NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 255 ));
                NewBrush.CreateSolidBrush( RGB( 0, 0, 255 ) );
            }
                break;
            default:
                {
                    NewPen.CreatePen( PS_SOLID, 1, RGB( 0, 0, 0 ));
                    NewBrush.CreateSolidBrush( RGB( 255, 255, 255 ) );
                }
            }*/
            dcDraw.SelectObject( &NewPen );
            dcDraw.SelectObject( &NewBrush );
            
            dcDraw.Ellipse( &rect );
            
            dcDraw.SelectObject( pOldPen );
            dcDraw.SelectObject( pOldBrush );
            NewPen.DeleteObject();
            NewBrush.DeleteObject();
        }
    }
}
 
/*{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}
*/
 
// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CLesson1Dlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}
 
void CLesson1Dlg::OnBtnAdd() 
{
    // TODO: Add your control notification handler code here
m_EditText++;
UpdateData( FALSE );
char szBuf[128];
sprintf( szBuf, "Нажата кнопка \"+\"" );
m_List.AddString( szBuf );
    
sprintf( szBuf, "%d", m_EditText );
SetDlgItemText( IDC_CALC_ON_STATIC, szBuf );
 
sprintf( szBuf, "%d", m_EditText);
SetDlgItemText(IDC_CALC_ON_EDIT, szBuf);
 
CString s;
GetDlgItemText(IDC_CALC_ON_EDIT,s);
m_List.AddString( s );
 
}
 
void CLesson1Dlg::OnBtnSub() 
{
    // TODO: Add your control notification handler code here
    m_EditText--;
UpdateData( FALSE );
char szBuf[128];
sprintf( szBuf, "Нажата кнопка \"-\"" );
m_List.AddString( szBuf );
 
sprintf( szBuf, "%d", m_EditText );
SetDlgItemText( IDC_CALC_ON_STATIC, szBuf );
 
CString s;
GetDlgItemText(IDC_CALC_ON_EDIT,s);
m_List.AddString( s );
 
 
}
 
void CLesson1Dlg::OnBtnRetrive() 
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    char szBuf[32];
    sprintf( szBuf, "Введено число: %d", m_EditText );
    m_List.AddString( szBuf );
 
}
 
void CLesson1Dlg::OnCheck1() 
{
    // TODO: Add your control notification handler code here
    UpdateData( TRUE );
    Invalidate();
}
 
void CLesson1Dlg::OnEditchangeCombo1() 
{
    // TODO: Add your control notification handler code here
    
}
 
/*void CLesson1Dlg::OnColorRed() 
{
    // TODO: Add your control notification handler code here
    //m_nColorID = 1;
    Invalidate();
}
 
/*void CLesson1Dlg::OnColorGreen() 
{
    // TODO: Add your control notification handler code here
    //m_nColorID = 2;
    Invalidate();
 
}*/
 
//void CLesson1Dlg::OnColorBlue() 
{
    // TODO: Add your control notification handler code here
    //m_nColorID = 3;
//  Invalidate();
//}
 
void CLesson1Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default
    if ( nSBCode == SB_THUMBTRACK )
    {
    m_HProgress.SetPos( m_HSlider.GetRangeMax() -m_HSlider.GetPos() );
    UpdateData(false);
    }
    
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
 
void CLesson1Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default
    m_VProgress.SetPos( m_VSlider.GetPos() );
    UpdateData(false);
 
    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
 
void CLesson1Dlg::OnSelchangeCombo1() 
{
    // TODO: Add your control notification handler code here
    m_List.ResetContent();
    char szBuf[128];
    int nIndex = m_Combo.GetCurSel();
    switch ( nIndex )
    {
        case 0:
        {
        sprintf( szBuf, "2 4 6 8");
        m_List.AddString( szBuf );
        }
        break;
        case 1:
        {
        sprintf( szBuf, "1 3 5 7 9");
        m_List.AddString( szBuf );
        }
        break;
        case 2:
        {
            m_EditText = 0;
            
            char szBuf[128];
            sprintf( szBuf, "0");
            m_HProgress.SetPos(0);
            m_VProgress.SetPos(0);
 
            SetDlgItemText( IDC_CALC_ON_STATIC, szBuf );
            m_Check.SetCheck( 0 );
            m_nColorID = 0;
            m_HSlider.SetPos(0);
            m_VSlider.SetPos(0);
            UpdateData(FALSE);
            Invalidate();
}
break;
default:
{
m_EditText = 0;
UpdateData(TRUE);
m_Check.SetCheck( 0 );
m_nColorID = 0;
 
Invalidate();
}
}
 
    
}
 
 
 
void CLesson1Dlg::OnChangeCalcOnEdit() 
{
    // TODO: If this is a RICHEDIT control, the control will not
    // send this notification unless you override the CDialog::OnInitDialog()
    // function and call CRichEditCtrl().SetEventMask()
    // with the ENM_CHANGE flag ORed into the mask.
    
    // TODO: Add your control notification handler code here
    
    UpdateData( true );
    char szBuf[128];
    sprintf( szBuf, "%d", m_EditText );
    SetDlgItemText( IDC_CALC_ON_STATIC, szBuf );
    
 
}
 
void CLesson1Dlg::OnBnClickedCheck2()
{
    // TODO: добавьте свой код обработчика уведомлений
    //m_nColorID = 4;
    _bIsRed = !_bIsRed;
    Invalidate();
}
 
void CLesson1Dlg::OnBnClickedCheck3()
{
    // TODO: добавьте свой код обработчика уведомлений
    //m_nColorID = 5;
    _bIsGreen = !_bIsGreen;
    Invalidate();
}
 
void CLesson1Dlg::OnBnClickedCheck4()
{
    // TODO: добавьте свой код обработчика уведомлений
    //m_nColorID = 6;
    _bIsBlue = !_bIsBlue;
    Invalidate();
}

Но сейчас я по частям покажу где именно мне не понятно. Этот код начинается с 16-20 строки.
C++
1
2
3
bool _bIsGreen = false;
bool _bIsRed = false;
bool _bIsBlue = false;
Так как я понял то мы объявили переменные типа bool, но я не могу понять почему мы им придаем значение false?

И вот эти строчки я тоже не могу понять, начиная с 211 строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int red = 0;
            int green = 0;
            int blue = 0;
 
            if(_bIsRed)
            {
                red = 255;
            }
 
            if(_bIsGreen)
            {
                green = 255;
            }
 
            if(_bIsBlue)
            {
                blue = 255;
            }
А здесь я как бы примерно понимаю что мне сделали, но все равно я не уверен, начиная с 509 строки(включительно)
Я просто не уверен что это может обозначать
C++
1
_bIsBlue = !_bIsBlue;
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
17.03.2011, 00:57
так вот оно что, Михалыч =)


C++
1
2
3
bool _bIsGreen = false;
bool _bIsRed = false;
bool _bIsBlue = false;
это по сути флаги каждого из цветов, устанавливаемых в чекбоксе.
как только цвет выбран - соответствующий флаг принимает значение истины.

сейчас поясню части кода, написанные дальше, и тогда отвечу сразу на все вопросы.

И вот эти строчки я тоже не могу понять, начиная с 211 строки

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                        int red = 0;
                        int green = 0;
                        int blue = 0;
 
                        if(_bIsRed)
                        {
                                red = 255;
                        }
 
                        if(_bIsGreen)
                        {
                                green = 255;
                        }
 
                        if(_bIsBlue)
                        {
                                blue = 255;
                        }
создаем три переменных, которые в результате формируют окончательный цвет: для красной, зеленой и синей компонент. изначально обнуляем их - т.к. окно много раз перерисовывается в процессе работы программы, если компоненты не очищать, то ранее установленное значение будет оставаться мусором в переменной и как результат получим черт знает что, вместо выбранного цвета.

в зависимости от значений флагов формируем цвет:
подряд проверяем наличие выбора одного из трех цветов (значение флага, если истина - цвет выбран), если цвет выбран - устанавливаем его яркость (долю, насыщенность) в 255 (максимальное значение).

C++
1
2
3
4
5
6
7
void CLesson1Dlg::OnBnClickedCheck4()
{
        // TODO: добавьте свой код обработчика уведомлений
        //m_nColorID = 6;
        _bIsBlue = !_bIsBlue;
        Invalidate();
}
а тут самое интересное: если чекбокс был нажат (неважно, установлена или снята отметка), то новым значением флага для данного цвета будет его обратное значение.

и вот тут ответ на первый вопрос:
почему мы им придаем значение false?
это начальное значение полей чекбокса.

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

надеюсь у меня получилось объяснить.
1
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
17.03.2011, 18:25  [ТС]
Я разобрался со всем, но мне все равно интересно, можно ли как-то изменить промежуточный цвет(когда выделены два CheckBox). Я просто понял что если мы будем изменять значение (0-255), то у нас будет меняться цвет круга. Ну а мне теперь интересно как изменить промежуточный цвет?
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
17.03.2011, 18:28
т.е. эффект плавного перехода от одного цвета к другому?
0
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
17.03.2011, 18:34  [ТС]
Нет чуть не так. Я хочу понять как сделать так чтобы при нажатии двух "CheckBox'сов" у меня делался тот цвет который я хочу.
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
17.03.2011, 18:42
если я правильно понял, ты хочешь, чтобы при выборе, например, красного и синего у тебя круг становился бирюзовым, но при выборе красного он оставался красным, а при выборе синего - синим?

как один из вариантов после проверки

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int red = 0;
                        int green = 0;
                        int blue = 0;
 
                        if(_bIsRed)
                        {
                                red = 255;
                        }
 
                        if(_bIsGreen)
                        {
                                green = 255;
                        }
 
                        if(_bIsBlue)
                        {
                                blue = 255;
дописать что-то такое:

C++
1
2
3
4
5
6
7
if ((red) && (blue)) // если выделены оба цвета - значения палитр ненулевые
{
// и дальше меняем само цветовое сочетание
red = 80;
green = 11;
blue = 112;
}
можно подумать над другими, более оптимальными вариантами.
1
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
17.03.2011, 19:09  [ТС]
Спасибо большое. Все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2011, 19:09
Помогаю со студенческими работами здесь

Проверка всех условий, If else
помогите в 14 строке, как сделать так, что бы проверялись все условия, и если хотя бы 1 верное то выполнялось бы то что должно...

Как работает проверка условий в C++?
int x = 1; int y = 2; if((x!=2)&amp;&amp;(y!=2)) { std::cout&lt;&lt;&quot;something&quot;; } Как в данном случае будет работать проверка условий?...

Проверка достаточных условий сходимости методов
Проверьте пожалуйста Задание =Предусмотреть проверку достаточных условий сходимости методов =Вычислить невязку полученного...

Проверка истинности различных условий в матрице
Дана вещественная матрица размерности n * m. По матрице получить логический вектор, присвоив его k-ому элементу значение True , если...

Проверка условий позволющих выполнить соответствующие пункты задания
Всем доброго дня! Прошу помочь с исправлением кода. Изначально задание было такое: В одномерном массиве, состоящем из n целых...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru