Я создаю GUI для запуска на STM32F429 микроконтроллере, он написан на C.Пользовательский интерфейс - прокрутка текста Просмотр
Проблемы у меня в том, как управлять прокрутку для просмотра текста. У меня есть буфер данных с символами ASCII, и я хочу управлять символом новой строки (\ n, ASCII-код 10), чтобы он дал новую строку в текстовом поле.
Вот небольшой пример буфера при прокрутке одной строки, без прокрутки и прокрутки вперед по одной строке: http://i.stack.imgur.com/4eK7w.png. Зеленое поле - это указатель начала, а красный - конечный указатель. Синие поля показывают строку текста (максимум 6 символов).
Прокрутка вперед одну строку:
Это один довольно легко.
- Переместить указатель начала после следующего символа «\ n» или 6 позиций (что на первом месте).
- Переместить указатель конца на следующий символ «\ n» или 6 позиций (что бы ни было первым).
прокрутки назад один ряд:
Это одна у меня возникают проблемы с.
- Если мы не сталкиваемся с новой строкой при перемещении указателя начала, мы можем переместить его на 6 позиций без проблем.
- Если текущий указатель конца не является символом новой строки «\ n», мы можем переместить его на 6 позиций, но если это произойдет, мы столкнемся с проблемой.
При взгляде на стол легко видеть, что указатель начала должен перемещать 2 шага, а конечный указатель - 5 шагов, и я думаю, это потому, что мы можем видеть все данные (то есть мы знаем о прошлом и будущее). Но означает ли это, что нам нужно пройти все предыдущие данные, чтобы знать, где расположены строки?
Если у кого-нибудь есть идеи, как это решить, я был бы очень благодарен!
EDIT: Добавлен еще один пример изображения: http://i.stack.imgur.com/FKCNg.png
Спасибо, первый шаг очень помог! Я проверил с другим буфером примеров (http://i.stack.imgur.com/FKCNg.png), и он, похоже, работает. В худшем случае здесь происходит переход от строки 5 к 4, так как она требует полного перехода к началу. Небольшая оптимизация для шага 2: «Если вы не встретите никаких« \ n »(шаг 1 в комплекте) после символов одной строки, вы можете остановить цикл, как только вы достигли цели». Это можно увидеть, перемещаясь от строки 3 к 2 в новом примере. – sandberg