2009-10-22 2 views
1

У меня есть поток данных, которые я хочу разместить в контейнере. Этот контейнер будет либо иметь фиксированный размер, либо динамически ограничен определенным размером во время выполнения. Последнее может быть предпочтительным.wxVListBox с «динамическими» данными

Когда контейнер заполнен, самые старые данные будут удалены.

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

Это, безусловно, верно для любого контейнера с встроенным индексом типа массива, требуемым OnDrawItem.

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

Как я могу это решить? Любые другие идеи или контейнеры, о которых я не думал?

ответ

1

Лучшим подходом является управление полным состоянием контейнера лениво в пределах OnDrawBackground. Таким образом, пользовательский интерфейс сам гарантирует, что данные остаются статичными в последующих вызовах OnDrawItem, используя deque в качестве контейнера.

+0

+1 для обмена собственными результатами. –

Смежные вопросы