滚动条 实现的细节代码 SCROLLINFO

今天分析了以前的一段自绘 滚动条的代码, 终于明白了滚动条的细节。

 

 对于Edit 来说 

SCROLLINFO si1; 

si1.nMin:0, si1.nMax:14, si1.nPage:6, si1.nPos:9, si1.nTrackPos:9

 

例如上面信息:

si1.nMax - si1.nMin + 1

代表编辑框中文字的总行数 

si1.nPage:6

编辑框一页可以容纳的行数(在不足一显示页时为当前页中的行数)

一页:在不用滚动条的情况下最多可以显示的行数。编辑框大,可以显示nPage的就大

 si1.nPos:9 si1.nTrackPos:9

滚动条把Edit中文本滚过的行数, 每次点击滚动条上下箭头,编辑框滚动1

 

假设 nPage=10,

si1.nMax - si1.nMin + 1 = 100

nPos最大为 100 - 10 = 90, 对于垂直滚动条来说,此时滑块滚到了最底端。

 

垂直滚动条滑块高度的计算:

si1.nMax - si1.nMin + 1 = 800   编辑框文本总行数

si1.nPage = 100                       编辑框最多一页最多容纳 100

 

假设垂直滚动条:

TotalHeight = 100 像素, 上下2Arrow 10像素,

InterHeight = TotalHeight - HeightOf(Arrow)*2 = 100 -10*2 = 80

 

ThumbHeight = si1.nPage * InterHeight /(si1.nMax - si1.nMin + 1) 

                        = 100 * 80/(800) = 10 像素

 

计算滑块的位置:

对于垂直滚动条,计算滑块Thumb的最上端的位置 ThumbPos

EmptyHeight = InterHeight – ThumbHeight

EmptyHeight: 滚动条内空白区域的总高度

InterHeight: 滚动条出去上下箭头的高度

ThumbHeight: 滑块的高度

 

存在下面比例关系:

si1.nTrackPos/( si1.nMax - si1.nMin + 1 - si1.nPage) = ThumbPos/EmptyHeight;

 

 

 

 

si1.nMax - si1.nMin + 1 - si1.nPage

需要滚动条滚动才能显示的总行数(对应滚动条的空白区域)

si1.nTrackPos

已经滚动的行数(对应滑块的位置)

 

 

则滑块最顶端 ThumbPos = EmptyHeight * si1.nTrackPos/( si1.nMax - si1.nMin + 1 - si1.nPage)

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue_Dream_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值