滚动条原理分析(在使用纯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 代码画家都要经过的事….
如上图:
列表可以区高度为 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 代码画家都要经过的事….
相关文章推荐
- 【技术】IE7、IE8下,js不起作用,在头部加<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- (转)一种开源的跨平台视频开发框架:VideoLAN - VLC media player
- 不确定参数列表
- Arcgis 控制地图缩放比例
- 坑爹的tp-link管理密码设置
- 一个函数重载问题
- 隐藏进程名
- 讨论c/c++计算小数的精度问题
- 命名对象继承1-验证Create*命名对象安全属性的传递
- 命名对象继承2-验证Open*命名对象安全属性的传递
- c++中不需要显示指出struct
- 收藏5篇文章
- 收藏的关于开发的一些东西
- 反驳--(知乎)大龄门外汉如何进入软件开发行业?的回复
- 一段挂起进程中所有线程的代码
- GetThreadTimes获取其它线程cpu时间
- 如何输出高精度时间差
- 注意!GetThreadPriority的返回值不是系统的优先级值
- windows核心编程 第8章201页旋转锁的代码在新版Visual Studio运行问题
- FILETIME类型到LARGE_INTEGER类型的转换