计算具有不同行高的网格中的滚动条高度

时间:2011-08-19 14:09:02

标签: c++ user-interface scroll grid scrollbar

我的网格有很多行(例如1 000 000)。每行的高度可以是唯一的。但大多数行具有相同的高度。因此,无法确定每行的高度并获得总网格高度。

我需要在这个网格上实现平滑的垂直滚动,不仅跳过行,因为行可以高于可见区域。

我的解决方案是:

  1. 获取行数
  2. 每行分为10个部分
  3. =>滚动条最大值是(行数)* 10
  4. 从滚动位置我得到:
    • 第一个可见行=(滚动位置)/ 10
    • 第一个可见行移位=(滚动位置)%10
  5. 如果所有行都具有相同的高度,则此工作正常。如果有一行高度为500像素而另一行有25像素滚动看起来很糟糕。

    有人建议如何更好地解决这个问题吗?

    网格在这里: http://img560.imageshack.us/img560/7775/scroll.png

1 个答案:

答案 0 :(得分:0)

让滚动以像素为单位:

  • 汇总所有行的总高度,并将滚动条最大值设置为该值。
  • 缓存变量中的第一个可见行索引。
  • 当用户向上或向下滚动时,您可以从当前第一个可见行顺序扫描以查找新的行。这为每次更新提供了按顺序读取的分期固定时间工作。
  • 您不会经常随机访问(例如滚动到行号N),因此在您这样做时进行线性搜索很好。如果你需要更快的东西(我怀疑那样),那么你可以预先计算行高的部分和,并进行二分搜索。