Как сделать активным вертикальный скроллбар CListCtrl во время вычислений?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 27.03.19 13:29
Оценка:
Есть таблица m_IDC_LIST3 типа CListCtrl. В неё во время вычислений выводится информация. При этом временнОй интервал между выводами в таблицу составляет две с половиной минуты--столько времени требуется для вычислений на каждом шаге.
Видимая часть этого m_IDC_LIST3 оставляет 12 строк. Для просмотра последующих строк нужно пользоваться вертикальным скроллбаром.
Но этот вертикальный скроллбар становится активным только тогда, когда будут выведены все строки в таблицу m_IDC_LIST3.

Можно ли сделать так, чтобы этот вертикальный скроллбар был бы активным не только после завершения вывода в таблицу, но и до этого завершения? То есть можно ли сделать так, чтобы можно выбло прокручивать по вертикали содержимое таблицы до завершения вычислений?

Код:

void CCalcDialog::OnBnClickedButton1()
// если была нажата кнопка "Рассчитать"
{
    // TODO: добавьте свой код обработчика уведомлений
    // ...
    jt = jt0;
    tj = tj0;
    countline = 0;
    do
    {
        //Progn_Step_interface(sat, jt, tj, step, rv, &jt, &tj, 0);
        Progn_Step_interface(sat, jt, tj, step, rv, &jt2, &tj2, 0);
        curtime = jt2 + tj2;
        jt2 = (long)curtime;
        tj2 = curtime - (long double)jt2;
        JD(jt2,tj2,&year,&month,&day,&partDay);
        partDay *= 86400.0;
        hour = (int)(partDay / 3600.0);
        partDay -= hour * 3600.0;
        minute = (int)partDay / 60.0;
        second = partDay - minute * 60.0;
        vecttoelem2full(rv[0].x,rv[0].y,rv[0].z,rv[1].x,rv[1].y,rv[1].z,year,month,day,hour,minute,second,myu,1,a,e,ild,w,Omega,M0,tpiyear,tpimonth,tpiday,tpihour,tpiminute,tpisecond,p,rpi,ralpha,u0,lambda0,teta0,T,h);
        if (countline>=12)  m_IDC_LIST3.InsertItem(countline,L""); // если количество строк больше 12, то добавляем в таблицу строку
        swprintf(ws,39,L"%.3f",(countline+1)*step/365.25);
        m_IDC_LIST3.SetItemText(countline,0,ws); // dt полета (годы)
        swprintf(ws,39,L"%d.%02d.%02d/%02d:%02d:%06.3f",year,month,day,hour,minute,second);
        m_IDC_LIST3.SetItemText(countline,1,ws); // дата
        T *= 24.0;
        swprintf(ws,39,L"%f",T);
        m_IDC_LIST3.SetItemText(countline,2,ws); // период T
        Hpi = rpi - REarth/AE;
        Hpi = Hpi * AE;
        swprintf(ws,39,L"%f",Hpi);
        m_IDC_LIST3.SetItemText(countline,3,ws); // Hpi
        Halpha = ralpha - REarth/AE;
        Halpha = Halpha * AE;
        swprintf(ws,39,L"%f",Halpha);
        m_IDC_LIST3.SetItemText(countline,4,ws); // Halpha
        swprintf(ws,39,L"%f",ild/PI*180.0);
        m_IDC_LIST3.SetItemText(countline,5,ws); // наклонение i
        swprintf(ws,39,L"%f",Omega/PI*180.0);
        m_IDC_LIST3.SetItemText(countline,6,ws); // долгота восходящего узла Omega
        swprintf(ws,39,L"%f",w/PI*180.0);
        m_IDC_LIST3.SetItemText(countline,7,ws); // аргумент перицентра w
        m_IDC_LIST3.RedrawWindow();
        jt = jt2;
        tj = tj2;
        countline++;
    } while ((jt+tj)<=(jt0+tj0+timeinterval-step) && Hpi > 80);
    AfxMessageBox(L"Расчёт на заданный интервал времени завершён.");
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.