Mark Danniel Ответов: 1

Как бороться с миганием окна MFC listcontrol?


Я написал прикладную программу MFC.Я использовал некоторые элементы управления ListControl и некоторые переключатели в диалоговом окне.Я хотел бы реализовать обновление данных в реальном времени с помощью ListControl при нажатии на одну радиокнопку, вызывающую соответствующие события.

Во-первых,когда диалог инициализируется,вставляем данные в ListControl и показываем диалог.

Во-вторых, когда я нажал на одну радиокнопку среди них.Первым шагом было удаление всех столбцов и всех элементов в ListControl.Второй шаг состоял в том, чтобы вставить мои необходимые данные в ListControl.Кстати, я использовал ту же переменную относительно идентификатора ListControl.

Обратите внимание:данные были изменены временем!

Наконец я обнаружил, что в окне ListControl появилась быстрая вспышка, и мне стало так плохо.
Так есть ли какие-то хорошие способы решить эту проблему?И можете ли вы предложить мне какой-нибудь хороший или продвинутый совет?Большое спасибо!

Что я уже пробовал:

Способы, которые я пробовал, не были действительными...

1 Ответов

Рейтинг:
2

Jochen Arndt

Самое простое решение-отключить рисование при обновлении списка.

m_ListCtrl.SetRedraw(0);

// Update list here

m_ListCtrl.SetRedraw(1);
// Invalidate entire control
// May also use InvalidateRect() for a specific area
m_ListCtrl.Invalidate();
// Force redrawing
m_ListCtrl.UpdateWindow();

Если это возможно, вы должны изменять только части списка, а не заменять полное содержимое. Кроме того, часто нет необходимости удалять столбцы, когда они не изменятся.

[РЕДАКТИРОВАТЬ]
Вы также можете установить LVS_EX_DOUBLEBUFFER Расширенный Список-Стили Представления (Windows)[^] чтобы уменьшить мерцание.
[/РЕДАКТИРОВАТЬ]


Mark Danniel

Спасибо.Я попробую.