Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Генерация элементов меню как в uTorrent


Автор: suxxor 21.10.2015, 06:37
по сути нужен генератор массива по заданному шаблону, на скриншоте показано как это выглядит в программе utorrent.

в итоге должен получиться массив вроде этого: 10, 15, 20, 25, 30, 35, 40, 41, 42, 43, 44, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95

набросок:
Код

int current = 43; //

for (int i = 10; i < 100; i += 5)
{
    char str[50];
    sprintf(str, "%d%%", i);
    AppendMenu (hm1, MF_STRING, 0, str);
}


user posted image

Автор: math64 21.10.2015, 08:12
Код

static const int array[] =
{ 10, 15, 20, 25, 30, 35, 40, 41, 42, 43, 44, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95 };
const int size = sizeof(array) / sizeof(array[0]);
int current = 43;
for (int i = 0; i < size; i++)
{
    char str[50];
    bool isCurrent = (array[i] == current);
    sprintf(str, "%d%%", array[i]);
    AppendMenu (hm1, MF_STRING, 0, str); // Ну и как-то выделить пункт меню если isCurrent == true
}

Автор: suxxor 21.10.2015, 08:28
math64, нет, возможно я неправильно изложил в теме, но суть вот в чём: в примере привёл utorrent который генерирует массив чисел в меню для регулировки ограничения скорости, шаг между числами зависит от текущего значения и по мере отдаления от него увеличивается, то есть от значения "current" в радиусе 5 чисел шаг равен 1, дальше увеличивается на 5, 10, и так до 250 (по крайней мере так реализовано в utorrent).

Автор: math64 21.10.2015, 14:56
Код

int min = 10;
int max = 95;
int current = 43;
int step = 5;
for (int i = min; i <= max;)
{
    char str[50];
    sprintf(str, "%d%%", array[i]);
    AppendMenu (hm1, MF_STRING, 0, str);
    // Вычисление следующего индекса - если что не так, поправишь.
    if (i >= current - step && i <= current + step)
        i++;
    else
        i += step;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)