三、Windows编程之滚动条—滚动条的范围和位置
每个滚动条均有一个相关的「范围」(这是一对整数,分别代表最小值和最大值)和「位置」(它是卷动方块在此范围内的位置)。当卷动方块在卷动列的顶部(或左部)时,卷动方块的位置是范围的最小值;在卷动列的底部(或右部)时,卷动方块的位置是范围的最大值。
在内定情况下,滚动条的范围是从0(顶部或左部)至100(底部或右部),但将范围改变为更方便于程序的数值也是很容易的:
SetScrollRange (hwnd, iBar, iMin, iMax, bRedraw) ;
参数iBar为SB_VERT或者SB_HORZ,iMin和iMax分别是范围的最小值和最大值。如果想要Windows根据新范围重画滚动条,则设置bRedraw为TRUE(如果在呼叫SetScrollRange后,呼叫了影响滚动条位置的其它函数,则应该将bRedraw设定为FALSE以避免过多的重画)。
卷动方块的位置总是离散的整数值。例如,范围为0至4的滚动条具有5个卷动方块位置,如图4-6所示。
您可以使用SetScrollPos在滚动条范围内设置新的卷动方块位置:
SetScrollPos (hwnd, iBar, iPos, bRedraw) ;
参数iPos是新位置,它必须在iMin至iMax的范围内。Windows提供了类似的函数(GetScrollRange和GetScrollPos)来取得滚动条的目前范围和位置。
在程序内使用滚动条时,程序写作者与Windows共同负责维护滚动条以及更新卷动方块的位置。下面是Windows对滚动条的处理:
-
处理所有滚动条鼠标事件
-
当使用者在滚动条内单击鼠标时,提供一种「反相显示」的闪烁
-
当使用者在滚动条内拖动卷动方块时,移动卷动方块
-
为包含滚动条窗口的窗口消息处理程序发送滚动条消息
以下是程序写作者应该完成的工作:
-
初始化滚动条的范围和位置
-
处理窗口消息处理程序的滚动条消息
-
更新滚动条内卷动方块的位置
-
更改显示区域的内容以响应对滚动条的更改
像生活中的大多数事情一样,在我们看一些程序代码时这些会显得更加有意义。