Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Настройка цветов, Работа с trackbar and radio button 
:(
    Опции темы
Abbath1349
Дата 26.12.2010, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Делаю в диалоговом окне настройку цветов  у меня 10 кнопок radio button и 3 trackbara 
проблема в том,что значения из tarclbara передаются после того как нажимаеш на radiobutton ,а
хотелось бы ,чтобы при нажатой radiobutton можно было настраивать цвет. и ещо можно ли скоротить код где 10    case IDC_RADIO?
Код

BOOL CALLBACK Dialog1(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
{    
    int i;
    static int  track[3];
    static HWND hTrack[3];
static COLORREF color_dlg[10];
    switch (message)
    {
           case WM_INITDIALOG:
                for(i=0;i<10;i++)
                    color_dlg[i]=RGB(255,255,255);
            /*    for(i=0;i<3;i++)
                {
                SetDlgItemInt(hdlg, IDC_SP1+i, track[i], 0);
                hTrack[i] = GetDlgItem(hdlg, IDC_SLIDER1+i);
                SendMessage(hTrack[i], TBM_SETRANGE, 0, 255<<16);
                SendMessage(hTrack[i], TBM_SETPOS, TRUE, track[i]);
                }*/

                SetDlgItemInt(hdlg, IDC_SP1, track[0], 0);
                hTrack[0] = GetDlgItem(hdlg, IDC_SLIDER1);
                SendMessage(hTrack[0], TBM_SETRANGE, 0, 255<<16);
                SendMessage(hTrack[0], TBM_SETPOS, TRUE, track[0]);

                SetDlgItemInt(hdlg, IDC_SP2, track[1], 0);
                hTrack[1] = GetDlgItem(hdlg, IDC_SLIDER2);
                SendMessage(hTrack[1], TBM_SETRANGE, 0, 255<<16);
                SendMessage(hTrack[1], TBM_SETPOS, TRUE, track[1]);

                SetDlgItemInt(hdlg, IDC_SP3, track[2], 0);
                hTrack[2] = GetDlgItem(hdlg, IDC_SLIDER3);
                SendMessage(hTrack[2], TBM_SETRANGE, 0, 255<<16);
                SendMessage(hTrack[2], TBM_SETPOS, TRUE, track[2]);
            return TRUE;
        case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDC_RADIO1:
            color_dlg[0]=RGB(track[0],track[1],track[2]);    
            break;
        case IDC_RADIO2:
            color_dlg[1]=RGB(track[0],track[1],track[2]);        
            return TRUE;
        case IDC_RADIO3:
            color_dlg[2]=RGB(track[0],track[1],track[2]);        
            return TRUE;
        case IDC_RADIO4:
            color_dlg[3]=RGB(track[0],track[1],track[2]);        
            return TRUE;
        case IDC_RADIO5:
            color_dlg[4]=RGB(track[0],track[1],track[2]);        
            return TRUE;
        case IDC_RADIO6:
            color_dlg[5]=RGB(track[0],track[1],track[2]);        
            return TRUE;
        case IDC_RADIO7:
            color_dlg[6]=RGB(track[0],track[1],track[2]);        
            return TRUE;
        case IDC_RADIO8:
            color_dlg[7]=RGB(track[0],track[1],track[2]);        
            return TRUE;
        case IDC_RADIO9:
            color_dlg[8]=RGB(track[0],track[1],track[2]);        
            return TRUE;
        case IDC_RADIO10:
            color_dlg[9]=RGB(track[0],track[1],track[2]);        
            return TRUE;



            case IDOK:    
                for( i=0;i<10;i++)
                crColor[i]=color_dlg[i];
            InvalidateRect(GetParent(hdlg),NULL,1);
            EndDialog(hdlg,TRUE);            
            return TRUE;

            case IDCANCEL:
            EndDialog(hdlg,FALSE);
            return TRUE;
            default: return FALSE;

           
        }
            case WM_HSCROLL:
        /*        for(i=0;i<3;i++)
                {
                track[i] = LOWORD(SendMessage(hTrack[i], TBM_GETPOS, 0, 0));
                SetDlgItemInt(hdlg, 1025+i, track[i], 0);
                }*/
                track[0] = LOWORD(SendMessage(hTrack[0], TBM_GETPOS, 0, 0));
                SetDlgItemInt(hdlg, IDC_SP1, track[0], 0);

                track[1] = LOWORD(SendMessage(hTrack[1], TBM_GETPOS, 0, 0));
                SetDlgItemInt(hdlg, IDC_SP2, track[1], 0);
            
                track[2] = LOWORD(SendMessage(hTrack[2], TBM_GETPOS, 0, 0));
                SetDlgItemInt(hdlg, IDC_SP3, track[2], 0);            
                return TRUE;

               default: return FALSE;
      }
 return FALSE;
}

PM MAIL   Вверх
Earnest
Дата 26.12.2010, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



1) 
Цитата(Abbath1349 @  26.12.2010,  11:24 Найти цитируемый пост)
значения из tarclbara передаются после того как нажимаеш на radiobutton

Что это значит, поясни? Код обработчика WM_HSCROLL не работает?
2) Чтобы сократить код, загони ид-ры радио-кнопок в массив



--------------------
...
PM   Вверх
Abbath1349
Дата 26.12.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Цитата(Earnest @ 26.12.2010,  16:18)
1) 
Цитата(Abbath1349 @  26.12.2010,  11:24 Найти цитируемый пост)
значения из tarclbara передаются после того как нажимаеш на radiobutton

Что это значит, поясни? Код обработчика WM_HSCROLL не работает?
2) Чтобы сократить код, загони ид-ры радио-кнопок в массив

Ну вот у меня на диалоге три трекбара у них значения от 0 до 255(RGB) они для настройки цвета вот надо,чтобы нажамиаеш на radiobutton и настраиваеш цвет трекбарами. А у меня вначале надо цвет настроить потом на radiobutton нажать.
user posted image
PM MAIL   Вверх
Abbath1349
Дата 26.12.2010, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Цитата

 Чтобы сократить код, загони ид-ры радио-кнопок в массив

С ид радио кнопок не получается компилятор пишет там должна быть константа
PM MAIL   Вверх
Earnest
Дата 27.12.2010, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(Abbath1349 @  26.12.2010,  18:32 Найти цитируемый пост)
 вот надо,чтобы нажамиаеш на radiobutton и настраиваеш цвет трекбарами.

И что тебе мешает-то?
Цитата(Abbath1349 @  26.12.2010,  18:47 Найти цитируемый пост)
С ид радио кнопок не получается компилятор пишет там должна быть константа 

Где должна быть константа? Ты что, вот так примерно не можешь сделать:
Код

static WORD btnIDs[] = { IDC_RADIO1, ..... };
static  size_t bntCnt = sizeof (btnIDs)/sizeof (btnIDs[0]);
case WM_COMMAND:
   WORD cmdID = LOWORD (wParam);
    if (cmdID == IDOK)
   {
      ...
    }
    else
   {
        int iBtn = std::find (btnIDs, btnIDs+btnCnt, cmdID) - btnIDs;
        if (iBtn < btnCnt) {...}

    }



--------------------
...
PM   Вверх
Abbath1349
Дата 27.12.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Цитата

Цитата(Abbath1349 @  26.12.2010,  18:32 )
 вот надо,чтобы нажамиаеш на radiobutton и настраиваеш цвет трекбарами.

И что тебе мешает-то?

Проблема в том,что когда я нажимаю на радио кнопку он принимает значения трэкбара. А мне надо сделать ,чтобы когда нажата кнопка можно было на требарах настроить значение.
Например у меня вот щас стоит на требарах 0,0,0
если я нажму на радио 1 то первый цвет будет черный в не зависимости буду не буду я трекбары двигать.

Добавлено через 5 минут и 9 секунд
Цитата

Где должна быть константа? Ты что, вот так примерно не можешь сделать:
Код

static WORD btnIDs[] = { IDC_RADIO1, ..... };
static  size_t bntCnt = sizeof (btnIDs)/sizeof (btnIDs[0]);
case WM_COMMAND:
   WORD cmdID = LOWORD (wParam);
    if (cmdID == IDOK)
   {
      ...
    }
    else
   {
        int iBtn = std::find (btnIDs, btnIDs+btnCnt, cmdID) - btnIDs;
        if (iBtn < btnCnt) {...}
    }


А варианты по проще есть я чет не совсем понял как это работает. 
PM MAIL   Вверх
Earnest
Дата 27.12.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(Abbath1349 @  27.12.2010,  14:46 Найти цитируемый пост)
Проблема в том,что когда я нажимаю на радио кнопку он принимает значения трэкбара.

Это не "он" принимает, а ты. Какая разница-то? Радио-кнопка просто переключает нужный элемент (переменная == номер сектора), изменения в трекбаре всегда относи к текущему сектору. Чтобы все работало корректно, нужно еще при выборе сектора восстанавливать в трекбарах текущие значения сектора, вот и все.
Цитата(Abbath1349 @  27.12.2010,  14:46 Найти цитируемый пост)
А варианты по проще есть я чет не совсем понял как это работает.  

Куда уж проще-то. std::find не знаешь и догадаться не можешь? Так это просто поиск элемента в массиве.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.