На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Как сделать активным вертикальный скроллбар CListCtrl во время вычислений?
    Есть таблица m_IDC_LIST3 типа CListCtrl. В неё во время вычислений выводится информация. При этом временнОй интервал между выводами в таблицу составляет две с половиной минуты--столько времени требуется для вычислений на каждом шаге.
    Видимая часть этого m_IDC_LIST3 оставляет 12 строк. Для просмотра последующих строк нужно пользоваться вертикальным скроллбаром.
    Но этот вертикальный скроллбар становится активным только тогда, когда будут выведены все строки в таблицу m_IDC_LIST3.

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

    Код:

    ExpandedWrap disabled
      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"Расчёт на заданный интервал времени завершён.");
      }
      Я конечно могу ошибаться, может быть я не совсем понял верно задачу.
      Но я бы разделил вывод данных и расчеты.

      Во первых вынес расчет в отдельный поток, вовторых в интерфейсном потоке формировал нужный список на старте из данных с заглушками и выгружал их бы в CListCtrl.
      При получении данных, обновлял бы CListCtrl уже нужными данными.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script Execution time: 0,0771 ]   [ 18 queries used ]   [ Generated: 20.07.19, 05:30 GMT ]