Как исправить сломанные строки прокрутки экрана listctrl
// OnInitDialog() of my VC++ program // I setup a listctrl variable like this: <pre>::ZeroMemory(&item, sizeof(item)); item.mask = LVIF_TEXT; item.pszText = _T(""); item.iItem = 0; item.iImage = 0; item.state = 0 DWORD dwEXStyle = m_ListCtrl.GetExtendedStyle(); m_ListCtrl.SetExtendedStyle(dwEXStyle | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER); // And to move data to listctrl,I made one new row by InsertItem. ::ZeroMemory(&item, sizeof(item)); item.mask = LVIF_TEXT; item.pszText = _T(""); item.iItem = i; item.iImage = 0; item.state = 0;// LVIS_SELECTED | LVIS_FOCUSED; int NewRow = m_List_.InsertItem(&item); // Next, I move data value to each column by SetItemText like this: /* SEQ */ strTmp = logseq; m_ListCtrl.SetItemText(i, 0, strTmp); /* Next columns */ ... ... ... // At last, I focus newrow by EnsureVisible... m_ListCtrl.EnsureVisible(NewRow, TRUE); // And every 1000 row, I clear all screen by DeleteAllItems() if (row_count_ % 1000 == 0) { m_ListCtrl.DeleteAllItems(); row_count_ = 0; }
/* В первый раз, в течение некоторого времени начала, перемещение данных на экран показывает хорошую прокрутку.
Но после прохождения любого из долгого времени строки ListCtrl имеют ломаные линии и символы, так что никто не может различить данные экрана..
Я не знаю, почему и как ошибка этой ошибки.
Пожалуйста, дайте мне знать, как это исправить.
Заранее спасибо */
Что я уже пробовал:
Более 1 недели потрачено впустую на эту проблему.
Richard MacCutchan
Вам нужно остановить обновление вашего представления во время построения ListCtrl. И зачем создавать все записи с пустым текстом, а затем проходить через них все во второй раз, устанавливая текстовые элементы? Это просто делает его более вероятным, чтобы попасть в беспорядок, пытаясь обновить представление. Кроме того, имея более 1000 строк, вы затрудняете обновление представления, когда отправляете текст как можно быстрее в каждый элемент. Вы можете рассмотреть возможность использования виртуального ListCtrl и хранения всех тысяч элементов в памяти, готовых к отображению при прокрутке представления.