Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.200.226] |
|
Сообщ.
#1
,
|
|
|
Есть таблица 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, &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"Расчёт на заданный интервал времени завершён."); } |
Сообщ.
#2
,
|
|
|
Я конечно могу ошибаться, может быть я не совсем понял верно задачу.
Но я бы разделил вывод данных и расчеты. Во первых вынес расчет в отдельный поток, вовторых в интерфейсном потоке формировал нужный список на старте из данных с заглушками и выгружал их бы в CListCtrl. При получении данных, обновлял бы CListCtrl уже нужными данными. |