Member 12330615 Ответов: 0

Как исправить сломанные строки прокрутки экрана 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 и хранения всех тысяч элементов в памяти, готовых к отображению при прокрутке представления.

0 Ответов