建立更好的滚动
SYSMETS2动作良好,但它只是模仿其他程式中的卷动列,并且效率很低。很快我将示范一个新的版本,改进它的不足。也许最有趣的是这个新版本不使用目前所讨论的四个卷动列函式。相反,它将使用Win32 API中才有的新函式。
卷动列资讯函式
卷动列文件(在/Platform SDK/User Interface Services/Controls/Scroll Bars中)指出SetScrollRange、SetScrollPos、GetScrollRange和GetScrollPos函式是「过时的」,但这并不完全正确。这些函式在Windows 1.0中就出现了,在Win32 API中升级以处理32位元参数。它们仍然具有良好的功能。而且,它们不与Windows程式设计中新函式相冲突,这就是我在此书中仍使用它们的原因。
Win32 API介绍的两个卷动列函式称作SetScrollInfo和GetScrollInfo。这些函式可以完成以前函式的全部功能,并增加了两个新特性。
第一个功能涉及卷动方块的大小。您可能注意到,卷动方块大小在SYSMETS2程式中是固定的。然而,在您可能使用到的一些Windows应用程式中,卷动方块大小与在视窗中显示的文件大小成比例。显示的大小称作「页面大小」。演算法为:

可以使用SetScrollInfo来设置页面大小(从而设置了卷动方块的大小),如将要看到的SYSMETS3程式所示。
GetScrollInfo函式增加了第二个重要的功能,或者说它改进了目前API的不足。假设您要使用65,536或更大单位的范围,这在16位元Windows中是不可能的。当然在Win32中,函式被定义为可接受32位元参数,因此是没有问题的。(记住如果使用这样大的范