滚动条 实现的细节代码 SCROLLINFO

转载 2011年01月15日 22:11:00


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

 对于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 像素, 上下2个Arrow各 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)

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blue_dream_/archive/2010/06/01/5639144.aspx

SCROLLINFO结构的使用

在窗口程序中添加滚动条很容易,只要在CreateWindow中将WS(window style)添加WS_VSCROLL与WS_HSCROLL即可,然后再调用相应的函数就可以使用了。 滚动条有范围和位...
  • Augusdi
  • Augusdi
  • 2013年03月14日 12:27
  • 5684

VC/MFC加滚动条显示大图片SetScrollRange()、SetScrollInfo()两种思路实现及其两者优劣比较

OnHScroll和OnVScroll只提供16位的位置数据。GetScrollInfo和SetScrollInfo提供32位的滚动条位置数据。因此,一个应用程序在处理GetScrollInfo或Se...

滚动条 实现的细节代码 SCROLLINFO

今天分析了以前的一段自绘 滚动条的代码, 终于明白了滚动条的细节。 对于Edit 来说 SCROLLINFO si1; si1.nMin:0, si1.nMax:14...

SetScrollInfo()函数实现滚动条

SetScrollInfo可以同时实现SetScrollRange和SetScrollPos的功能。而且SetScrollInfo可以使滚动块的大小随内容的多少而改变。 其中SetScrollInfo...
  • ghevinn
  • ghevinn
  • 2015年04月15日 11:58
  • 3046

c#捕获当前屏幕

编程思路(API 编程): 先调用 GetForegroundWindow 获取当前活动程序窗口句柄,然后调用 GetWindowDC 获取窗口的设备句柄(或 GetDC 函数),调用 BitBl...
  • ghevinn
  • ghevinn
  • 2013年03月29日 18:45
  • 1236

c#+windows api SetWindowsHookEx 全局钩子 demo 下载

效果图 源码下载地址: http://download.csdn.net/detail/dhfekl/7522141
  • dhfekl
  • dhfekl
  • 2014年06月19日 16:27
  • 1564

VC滚动条 SCROLLINFO结构详解

SCROLLINFO结构详解   在刚开始使用SCROLLINFO结构时感觉很不顺手,尤其其中的成员fMask理解不太深刻,经过查询资料才理解一二。     在使用滚...
  • dong_cc
  • dong_cc
  • 2016年04月15日 10:03
  • 258

qml滚动条代码实现

  • 2015年12月14日 10:35
  • 4KB
  • 下载

用CSS实现跟随滚动条漂浮层代码

  • 2015年08月13日 14:51
  • 461B
  • 下载

js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码

获取浏览器窗口的可视区域高度和宽度,滚动条高度有需要的朋友可参考一下。 IE中,浏览器显示窗口大小只能以下获取: 代码如下复制代码  document.body.offsetWidth ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:滚动条 实现的细节代码 SCROLLINFO
举报原因:
原因补充:

(最多只允许输入30个字)