C语言 自定义GUI -可滚动文本视图



我正在创建一个GUI在STM32F429微控制器上运行,它是用c编写的。

我遇到的问题是如何管理文本视图的滚动。我有一个带有ASCII字符的数据缓冲区,我想管理换行字符(n, ASCII码10),以便它将在文本框中给出一个新行。

这是一个小的例子,当向后滚动一行,不滚动和向前滚动一行时的缓冲区:https://i.stack.imgur.com/4eK7w.png。绿框是开始指针,红框是结束指针。蓝色方框显示一行文本(最多6个字符)。

向前滚动一行:

这个很简单。

  • 将开始指针移动到下一个"n"字符之后或6个位置(无论哪个位置先到)。
  • 将结束指针移动到下一个"n"字符或6个位置(以先到的为准)。

向后滚动一行:

这就是我遇到麻烦的那个。

  • 如果我们在向后移动开始指针时没有遇到换行符,我们可以轻松移动它6个位置。
  • 如果当前结束指针不是换行符"n",我们可以将它向后移动6个位置,但如果是,我们就会遇到麻烦。

通过查看表格,很容易看出开始指针需要移动2步,结束指针需要移动5步,我认为这是因为我们可以看到所有的数据(即我们知道过去和未来)。但这是否意味着我们必须遍历所有之前的数据才能知道行在哪里?

如果有人对如何解决这个问题有任何想法,我将非常感谢!

编辑:

添加另一个示例图像:https://i.stack.imgur.com/FKCNg.png

我认为没有必要重新查看所有数据。你需要回到两个'n'字符

将开始指针移动到前一行的开头:

  1. 如果前一个字符是'n',则返回一个字符。(如果前一个字符不是'n',则继续步骤2)
  2. 在循环中,每次向后移动一个字符,直到到达另一个'n'或文本的开头。计算你在这个循环中向后移动了多少字符。
  3. 最后,当前一个循环的计数大于一行的字符值时,向前移动一行的字符值(并减少一行的字符值)。继续前进,直到计数为一行或更少。你结束的地方是上一行的开始。

相关内容

  • 没有找到相关文章

最新更新