滚动条 实现的细节代码 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
  • 5842

CWnd::SetScrollInfo

函数功能:该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮的位置。如被请求,函数也可以重画滚动条。  函数原型:int SetScrollInfo(HWND hWnd;int f...
  • dragoo1
  • dragoo1
  • 2017年01月17日 21:31
  • 295

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

OnHScroll和OnVScroll只提供16位的位置数据。GetScrollInfo和SetScrollInfo提供32位的滚动条位置数据。因此,一个应用程序在处理GetScrollInfo或Se...
  • Vivid_Song
  • Vivid_Song
  • 2015年11月18日 13:52
  • 2297

SCROLLINFO结构的使用

SCROLLINFO结构的使用
  • xuxiaofei77
  • xuxiaofei77
  • 2010年07月29日 09:45
  • 758

SCROLLINFO结构详解

在刚开始使用SCROLLINFO结构时感觉很不顺手,尤其其中的成员fMask理解不太深刻,经过查询资料才理解一二。     在使用滚动条功能时,如果要设置它的范围和位置可以用以前的函数,例...
  • cqyczj
  • cqyczj
  • 2014年04月24日 07:14
  • 379

滚动条 实现的细节代码 SCROLLINFO

今天分析了以前的一段自绘 滚动条的代码, 终于明白了滚动条的细节。 对于Edit 来说 SCROLLINFO si1; si1.nMin:0, si1.nMax:14...
  • Blue_Dream_
  • Blue_Dream_
  • 2010年06月01日 13:11
  • 2412

GetScrollInfo

函数功能:该函数找到滚动条的参数,包括滚动条位置的最小值、最大值,页面大小,滚动按钮的位置, 函数原型:BOOL GetScrolllnfo(HWND hWnd,int fnBar,LPSCROLLI...
  • cdlff
  • cdlff
  • 2008年11月22日 17:16
  • 1205

VC/MFC加滚动条显示大图片SetScrollInfo()、GetScrollInfo()代码实现

  • 2015年11月18日 13:57
  • 48.56MB
  • 下载

SetScrollInfo()函数实现滚动条

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

滚动条 实现的细节代码 SCROLLINFO

今天分析了以前的一段自绘 滚动条的代码, 终于明白了滚动条的细节。  对于Edit 来说 SCROLLINFO si1; si1.nMin:0, si1.nMax:14, si1.nPage:6, s...
  • abcpanpeng
  • abcpanpeng
  • 2011年01月15日 22:11
  • 4535
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:滚动条 实现的细节代码 SCROLLINFO
举报原因:
原因补充:

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