Как вы отображаете быстро обновляемые данные для пользователя в графическом приложении win32? - PullRequest
0 голосов
/ 09 января 2019

Итак, я создаю базовое приложение win32 GUI, и у меня есть вектор данных, который постоянно обновляется через внешний источник через порт. Я заинтересован в том, чтобы отобразить этот список данных пользователю, но я не уверен, что лучший способ сделать это, не вызывая мерцания обновления.

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

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Моя идея не имеет смысла обновлять визуальный контроль с той же скоростью, с которой вы получаете данные. Потому что даже если вы обновляете с той же скоростью, пользователи не могут видеть это изменение со скоростью получения данных. Человеческий глаз не видит изменения, происходящего в скорости, как 1/8 секунды. Поэтому лучше обновлять визуальный контроль контролируемым образом. Может быть, с помощью таймера.

0 голосов
/ 14 января 2019

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

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

0 голосов
/ 09 января 2019

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

Я бы посоветовал один из следующих вариантов:

1) использовать элемент управления ListBox или ListView; когда вы добавляете другой элемент строки, он только перерисовывает новый / измененный / прокручиваемый элемент. https://docs.microsoft.com/en-us/windows/desktop/controls/create-a-simple-list-box и https://docs.microsoft.com/en-us/windows/desktop/controls/list-view-controls-overview

2) Если вам нужен только постоянно прокручиваемый список данных, рассмотрите возможность использования приложения командной строки, которое выполняет запись в стандартный вывод и избавляет вас от многих проблем - cout или printf ваших данных.

...