滚动条原理分析:
如上图:
列表可以区高度为 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 代码画家都要经过的事….