您的位置:首页 > 其它

滚动条原理分析(在使用纯C + API画列表及列表的滚动条时遇到的问题)

2014-03-17 14:41 429 查看
滚动条原理分析:



如上图:

列表可以区高度为 200, 子项为 10 个, 每个高度 20, 滚动条高度为 200, 假定滚动条上下按钮高度各为10, 则

滑动块大小为180,

如果数据总长是 400, 就有 200 的高度, 10 个\子项不可见, 则有如下形式:

// 1 ---------------------------------------------------------------------------------

滚动条滑动块的高度 = (滚动条高度 - 滚动条上下按钮高度) / (数据总高度 / 滚动条高度)

= (200 – 20) / (400 / 200)

滚动条滑动块的高度 =90;

// 2 -----------------------------------------------------------------------------------

滑动块可以移动的范围 = (滚动条高度 - 滚动条上下按钮高度) - 滑动块的高度

= (200 – 20) – 90

滑动块可以移动的范围 =90

/ 3 ----------------------------------------------------------------------------------

不可见数据高度 = (数据总高度 - 滚动条高度(或列表高度))

不可见数据高度 = 400 –200 == 200

// 4 ----------------------------------------------------------------------------------

要移动的次数 =不可见数据高度/ 子项高度

= 200 / 20

要移动的次数 =10

// 5 ----------------------------------------------------------------------------------

那么 列表子项滚动一次, 滑动块要移动的距离为:

滑动块1次移动的距离 =滑动块可以移动的范围 / (要移动的次数 * X)

1 = 90 / (10X)

X = 9

反过来, 滑动块移动1次, 1 的距离, 子项要滚动 的次数是 1X = 9 / 9

------------------------------------------------------------------------------------------------

示例: 列表可以区高度为 200, 子项为 10 个, 每个高度 20, 滚动条高度为 200,

假定滚动条上下按钮高度各为10,则滑动块大小为180,

如果数据总长是 380, 就有 180 的高度, 10 个\子项不可见, 则有如下形式:

// 公式1:


滚动条滑动块的高度 = (200 – 20) / (380 / 200)= 180 / 1.9 = 94.7 约为 95

// 公式2:


滑动块可以移动的范围 = (200 – 20) – 95 = 180 –95 = 85

// 公式3:

不可见数据高度 = 380 – 200 = 180

// 公式4:

要移动的次数 = 180 / 20 = 9

// 公式5:

列表子项滚动1次, 滑动块1次移动的距离 = 85 / (9X) = 9.4 约为 9

//

更多可以直接去看我的共享代码 无句柄画列表-基本功能已实现.rar

每一个 C/C++
的UI 代码画家都要经过的事….
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: